Join nhiều bảng trong Laravel

Trong các bài viết trước bạn chỉ sử dụng lệnh để lựa chọn một bảng duy nhất trong cơ sở dữ liệu Database. Nhưng trong trường hợp bạn có sản phẩm có các chuyên mục thì sao? Bởi vì Category và Product thường được đặt ở hai bảng khác nhau.

Lúc này chúng ta sẽ phải cần dùng tới Inner Join trong Laravel. Nó là một phần kiến thức trong Query Builder để truy vấn dữ liệu ở trong CSDL.

Cách thức hoạt động:

  • Bạn sẽ tạo ra 2 bảng khác nhau là posts và catagory.
  • Trong bảng post bạn sẽ cho thêm một cột là cat_id để lưu trữ id của category
  • Sau đó sử dụng Inner Join để query ->join(‘category’, ‘cat_id’, ‘=’, ‘category.id’). Có nghĩa là id của bảng category bằng với cat_id trong bảng posts

phan-trang-laravel-3

Trong một tập tin bất kỳ của Controller bạn sẽ thêm đoạn mã sau:

public function index(){

        $viewdata = DB::table('posts')
           ->join('category', 'cat_id', '=', 'category.id')
           ->select('*')
           ->get();
         return view('home', compact('viewdata'));
        }

Giải thích:

  • Đầu tiên sử dụng DB:table để chọn bảng tên là posts.
  • Sau đó sẽ join một bảng là users hoặc category tùy ý bạn

Tại một tập bất kỳ trong View bạn sẽ đưa dữ liệu vào trong vòng lặp.

@foreach($viewdata as $data)
{{ $data->id }}
{{ $data->title }}
{{ $data->content }}

{{ $data->cat_name }}
@endforeach
  • cat_name: là cột đặt tên trong bảng category nếu đặt tên khác bạn cần sửa lại

Cùng chủ đề

Chuyên mục:

Hãy để lại bình luận:

Mình rất vui khi bạn đã để lại một bình luận. Xin lưu ý rằng tất cả các bình luận đều được kiểm duyệt theo chính sách bảo mật và tất cả các liên kết đều là nofollow. KHÔNG sử dụng từ khóa trong trường tên. Hãy để lại một cuộc trò chuyện cá nhân và ý nghĩa. *