0

[Phần 2] Tìm hiểu các method hỗ trợ quan hệ many-to-many

Chào các bạn! Trong bài viết hôm nay, mình sẽ giới thiệu tiếp theo các method hỗ trợ insert/delete data trong mối quan hệ nhiều-nhiều

1. Attach

  • Chức năng: dịch nghĩa tiếng Việt, attach có nghĩa là đính kèm, nói nôm na thì insert một hoặc nhiều record cho table mà ta đã định nghĩa trong model.
  • ví dụ: Userscó nhiều Roles, Và Roles cũng có nhiều Users sử dụng. Để thể hiện relationship này, ta sẽ sử dụng table trung gian, chẳng hạn: user_role Lúc này để insert 1 record vào table trung gian, thể hiện user X có role Y thì ta sẽ làm như sau:
$user = App\User::find(1); //Giả sử có user X có id=1 nhé :)
$user->roles()->attach($roleId);

Trong table trung gian, ngoài các field foreign_key. Nếu ta có sử dụng các field khác, thì mỗi lần insert data, ta cũng có thể truyền data cho các field đó Ví dụ: Ta có thể set time expired cho role:

$user->roles()->attach($roleId, ['expires' => $expires]);

Để tiện cho việc insert multiple data cùng lúc thì Laravel hỗ trợ insert data dưới dạng array.

$user->roles()->attach([
    1 => ['expires' => $expires],
    2 => ['expires' => $expires]
]);

2. Detach

  • Chức năng: Ngược lại với attach là insert một record. Detach sẽ remove/delete record đã insert trong table trung gian dựa vào điều kiện ta truyền vào
  • Nếu muốn remove 1 record, ta truyền ID record muốn delete vào. Ví dụ:
// Detach a single role from the user...
$user->roles()->detach($roleId);
  • Nếu muốn delete toàn bộ roles của user. Ta không cần truyền ID vào. Ví dụ:
// Detach all roles from the user...
$user->roles()->detach();

Cũng giống với attach, ngoài delete một record, ta có thể delete cùng lúc nhiều record. Bằng cách

$user->roles()->detach([1, 2, 3]);

3. Toggle

Như các bạn đã hình dung ở method attach và detach, ta có insert/delete data bằng 2 method này. Ngoài 2 method này, Laravel giới thiệu thêm 1 method nữa cũng hỗ trợ các thao tác liên quan đến database. Đó là toggle. Method này sẽ insert data nếu data muốn insert chưa tồn tại trong database (Tương tự Method attach).Và delete data nếu data đó đã tồn tại trong db rồi (tương tự method Detach) Ví dụ:

$user->roles()->toggle([1, 2, 3]);

Cảm ơn đã đọc bài viết của mình, Hi vọng nó giúp ích được cho các bạn! Chào, hẹn gặp lại bài viết tiếp theo nhé !


All rights reserved

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í