sql >> Database >  >> RDS >> Mysql

laravel welsprekend sorteren op relatie

Voor zover ik weet, enthousiast with methode voer de 2e query uit. Daarom kun je niet bereiken wat je wilt met gretig laden with methode.

Ik denk dat gebruik join methode in combinatie met relatiemethode is de oplossing. De volgende oplossing is volledig getest en werkt goed.

// 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();
}

Dan kun je $user->sortedChannels('desc') . aanroepen om de lijst met kanalen te krijgen bestellen door antwoorden created_at attribuut.

Voor conditie zoals kanalen (die al dan niet antwoorden hebben), gebruik gewoon leftJoin methode.

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

Bewerken:

Als u groupBy . wilt toevoegen methode voor de query, moet u speciale aandacht besteden aan uw orderBy clausule. Omdat in Sql natuur, Group By clausule die eerst wordt uitgevoerd vóór Order By clausule. Bekijk dit probleem in detail op deze stackoverflow-vraag .

Dus als u groupBy . toevoegt methode, moet u orderByRaw . gebruiken methode en moet als volgt worden geïmplementeerd.

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


  1. CONTROLEER BEPERKING van tekenreeks om alleen cijfers te bevatten. (Oracle-SQL)

  2. Hoe maak je een mysql-query constant ververst in PHP?

  3. Geef Dictionary<string,int> door aan de opgeslagen procedure T-SQL

  4. Een opgeslagen procedure oproepen vanuit de sluimerstand met zowel IN- als OUT-parameters