Mysql
 sql >> база данни >  >> RDS >> Mysql

laravel красноречив сортиране по отношение

Според моите познания, ви нетърпелив товар with метод изпълнява 2-ра заявка. Ето защо не можете да постигнете това, което искате снетърпеливо зареждане 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 клауза. Тъй като в Sql природа, Group By клауза се изпълнява първо преди Order By клауза. Вижте подробности за този проблем в този въпрос за stackoverflow .

Така че, ако добавите 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. Как да използвате wireshark за ясно улавяне на mysql заявка sql

  2. как да попълним стойността на колоната на mysql въз основа на формула?

  3. C++ връзки за MySQL

  4. Как да настроите правилната часова зона на MySQL JDBC в конфигурацията на Spring Boot

  5. MySQL група по дати между тях