Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

laravel fasih mengurutkan berdasarkan hubungan

Menurut pengetahuan saya, beban bersemangat with metode menjalankan kueri ke-2. Itulah mengapa Anda tidak dapat mencapai apa yang Anda inginkan dengan pemuatan bersemangat with metode.

Saya pikir gunakan join metode yang dikombinasikan dengan metode hubungan adalah solusinya. Solusi berikut telah diuji sepenuhnya dan bekerja dengan baik.

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

Kemudian Anda dapat memanggil $user->sortedChannels('desc') untuk mendapatkan daftar saluran pesan dengan balasan created_at atribut.

Untuk kondisi seperti saluran (yang mungkin atau mungkin tidak memiliki balasan), cukup gunakan leftJoin metode.

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

Sunting:

Jika Anda ingin menambahkan groupBy metode kueri, Anda harus memberi perhatian khusus pada orderBy ayat. Karena di Sql alam, Group By klausa dijalankan terlebih dahulu sebelum Order By ayat. Lihat detail masalah ini di pertanyaan stackoverflow ini .

Jadi jika Anda menambahkan groupBy metode, Anda harus menggunakan orderByRaw metode dan harus diimplementasikan seperti berikut.

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. Saya ingin menyalin tabel yang terdapat dari satu database dan menyisipkan ke tabel database lain

  2. Bagaimana cara melewatkan nilai baris saat ini dalam modal?

  3. Bagaimana Anda mengubah tingkat isolasi SQL dari Python menggunakan MySQLdb?

  4. Bagaimana mendefinisikan pesanan ORDER BY khusus di mySQL

  5. Grup Mysql Dengan interval 24 jam