Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

laravel sắp xếp hùng hồn theo mối quan hệ

Theo hiểu biết của tôi, tải háo hức with phương thức chạy truy vấn thứ 2. Đó là lý do tại sao bạn không thể đạt được những gì bạn muốn với tải háo hức with phương pháp.

Tôi nghĩ sử dụng join phương pháp kết hợp với phương pháp quan hệ là giải pháp. Giải pháp sau đã được kiểm tra đầy đủ và hoạt động tốt.

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

Sau đó, bạn có thể gọi $user->sortedChannels('desc') để nhận danh sách kênh đặt hàng theo câu trả lời created_at thuộc tính.

Đối với điều kiện như kênh (có thể có hoặc không có câu trả lời), chỉ cần sử dụng leftJoin phương pháp.

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

Chỉnh sửa:

Nếu bạn muốn thêm groupBy cho truy vấn, bạn phải đặc biệt chú ý đến orderBy của mình mệnh đề. Bởi vì trong Sql nature, Group By mệnh đề chạy đầu tiên trước Order By mệnh đề. Xem chi tiết vấn đề này tại câu hỏi về quy trình ngăn xếp này .

Vì vậy, nếu bạn thêm groupBy , bạn phải sử dụng orderByRaw và phải được triển khai như sau.

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. cách sử dụng LINQ to SQL với mySQL

  2. Cách cập nhật lại cột id bắt đầu từ 1

  3. Khi tôi CHÈN nhiều hàng vào một bảng MySQL, các id có được tăng thêm 1 không?

  4. Tên cột và bảng có phân biệt chữ hoa chữ thường trong MySQL không?

  5. Nhiều người thuê PHP SaaS - DB riêng biệt cho từng khách hàng, hay nhóm chúng?