sql >> Databasteknik >  >> RDS >> Mysql

laravel vältalig sortera efter relation

Enligt min kunskap, ivrig belastning with metod kör 2:a frågan. Det är därför du inte kan uppnå vad du vill med ivrig laddning with metod.

Jag tror att du använder join metod i kombination med relationsmetod är lösningen. Följande lösning är fullständigt testad och fungerar bra.

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

Sedan kan du anropa $user->sortedChannels('desc') för att få listan över kanaler beställ efter svar created_at attribut.

För skick som kanaler (som kanske har svar eller inte), använd bara leftJoin metod.

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

Redigera:

Om du vill lägga till groupBy metod för frågan måste du vara särskilt uppmärksam på din orderBy klausul. För i Sql natur, Group By klausul körs först före Order By klausul. Se detaljer om detta problem på denna stackoverflow-fråga .

Så om du lägger till groupBy metod måste du använda orderByRaw metod och bör implementeras enligt följande.

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


  1. SQL Rekursiv CTE:Hitta objekt länkade av egenskap

  2. Hur visar jag det fullständiga innehållet i en text- eller varchar(MAX)-kolumn i SQL Server 2008 Management Studio?

  3. hur man återställer databaser i phpmyadmin efter avinstallation av xampp

  4. ListView Kontroll Dra-släpp Sortera händelser