truy vấn trong laravel
Chào mọi người, mình đang tự học laravel, mong mọi người giúp đỡ. Mình có 2 bảng course và user liên kết nhiều nhiều với nhau qua bảng phụ course_user. đây là model của mình: trong user.php trong course.php
mình muốn lấy tất cả các khóa học thuộc tài khoản đang đăng nhập, tìm kiếm theo title và status và phân trang. cảm ơn mọi người đã giúp đỡ
1 CÂU TRẢ LỜI
DB::table('courses')
->join('course_user', 'courses.id', '=', 'course_user.course_id')
->join('users', 'course_user.user_id', '=', 'users.id')
->select('courses.*')
->where('courses.title', '=', 'từ khoá bạn cần tìm')
->where('courses.status', '=', 'status')
->paginate();
bạn tham khảo thử query này nhé. Cái này thì bạn cứ join bảng rồi query như bình thường thôi
Course::whereRelation('user', 'id', Auth::user()->id)->where('title', '=', 'từ khoá bạn cần tìm')->where('courses.status', '=', 'status')->paginate();
bạn tham khảo thử nhé
hoặc
Course::whereHas('user', function (Builder $query) {
$query->where('id', 'Auth::user()->id');
})->where(...)->where(...)
->paginate()
@dangcq17 cảm ơn bạn. theo bạn thì trong 3 cách mình nên ưu tiên dùng cách nào để truy vấn nhanh hơn và tiện hơn
@quangduc123 Đúng ra khi bạn dùng relation thì function của bạn phải là courses()
.
Bạn có thể lấy courses của user đăng nhập và query bằng cách này nữa
$request->user()->courses()->where('title', '=', 'từ khoá bạn cần tìm')->where('courses.status', '=', 'status')->paginate()->toArray();
Tham khảo: https://laravel.com/docs/10.x/eloquent-relationships#defining-relationships
@ruacondepzaj cảm ơn bạn đã góp ý
Nếu dùng relation thì DB sẽ chạy nhanh hơn, code ngắn hơn, nhưng phải khai báo quan hệ còn join thì nhanh hơn khi viết, không phải khai báo quan hệ. Bonus: Mấy câu này hỏi chatGPT thì phút mốt là ra!
@dinhchuyen996 cảm ơn bạn đã góp ý 😁