Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

संबंध द्वारा लार्वा वाक्पटु प्रकार

मेरी जानकारी के अनुसार, उत्सुक भार with विधि दूसरी क्वेरी चलाएं। इसलिए उत्सुक लोडिंग . के साथ आप वह हासिल नहीं कर सकते जो आप चाहते हैं with विधि।

मुझे लगता है कि join . का उपयोग करें संबंध विधि . के संयोजन में विधि समाधान है। निम्नलिखित समाधान पूरी तरह से परीक्षण किया गया है और अच्छी तरह से काम करता है।

// In User Model
public function channels()
{
    return $this->belongsToMany('App\Channel', 'channel_user')
        ->withPivot('is_approved');
}

public function sortedChannels($orderBy)
{
    return $this->channels()
            ->join('replies', 'replies.channel_id', '=', 'channel.id')
            ->orderBy('replies.created_at', $orderBy)
            ->get();
}

फिर आप $user->sortedChannels('desc') . पर कॉल कर सकते हैं चैनलों . की सूची प्राप्त करने के लिए जवाबों द्वारा आदेश created_at विशेषता।

चैनलों . जैसी स्थिति के लिए (जिसके उत्तर हो भी सकते हैं और नहीं भी), बस leftJoin . का उपयोग करें विधि।

public function sortedChannels($orderBy)
    {
        return $this->channels()
                ->leftJoin('replies', 'channel.id', '=', 'replies.channel_id')
                ->orderBy('replies.created_at', $orderBy)
                ->get();
    }

संपादित करें:

अगर आप groupBy जोड़ना चाहते हैं क्वेरी के लिए विधि, आपको अपने orderBy . पर विशेष ध्यान देना होगा खंड। क्योंकि एसक्यूएल . में प्रकृति, Group By Order By . से पहले क्लॉज रन करें खंड। इस समस्या को विस्तार से देखें यह स्टैक ओवरफ्लो प्रश्न

इसलिए यदि आप groupBy जोड़ते हैं विधि, आपको उपयोग करना होगा orderByRaw विधि और निम्नलिखित की तरह लागू किया जाना चाहिए।

return $this->channels()
                ->leftJoin('replies', 'channels.id', '=', 'replies.channel_id')
                ->groupBy(['channels.id'])
                ->orderByRaw('max(replies.created_at) desc')
                ->get();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP Mysql PDO बाध्य चर की संख्या टोकन की संख्या से मेल नहीं खाती

  2. mysqli में कई मूल्यों को सम्मिलित करने का सबसे अच्छा तरीका?

  3. MySQL यहां सिंगल लाइन टिप्पणियों का समर्थन नहीं कर रहा है। क्या कारण रहा होगा?

  4. MySQL और PHP:सिरिलिक वर्णों के साथ UTF-8

  5. अद्यतन या सम्मिलित करें MySQL पायथन