Yêu cầu thg 6 28, 2023 7:54 SA 237 1 1
  • 237 1 1
+2

truy vấn trong laravel

Chia sẻ
  • 237 1 1

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 image.png trong course.php image.png

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


Đã trả lời thg 6 28, 2023 8:07 SA
Đã được chấp nhận
+2
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

Chia sẻ
Avatar Quang Đức @quangduc123
thg 6 28, 2023 8:19 SA

@dangcq17 có cách nào thông qua hàm course hoặc user để lấy ko ạ

thg 6 28, 2023 8:23 SA

@quangduc123

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()
Avatar Quang Đức @quangduc123
thg 6 28, 2023 8:33 SA

@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

Avatar Nguyễn Văn Quy @ruacondepzaj
thg 6 28, 2023 8:59 SA

@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

Avatar Quang Đức @quangduc123
thg 6 28, 2023 10:05 SA

@ruacondepzaj cảm ơn bạn đã góp ý

thg 6 29, 2023 3:24 SA

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!

Avatar Quang Đức @quangduc123
thg 7 1, 2023 2:32 SA

@dinhchuyen996 cảm ơn bạn đã góp ý 😁

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí