- vừa được xem lúc

Tìm hiểu về mối quan hệ nhiều - nhiều trong Lavarel

0 0 7

Người đăng: Phan Cong Hieu

Theo Viblo Asia

1. Giới thiệu:

Mối quan hệ nhiều - nhiều (many-to-many) có đôi chút phức tạp hơn mối quan hệ hasOne và hasMany. Một ví dụ cho mối quan hệ nhiều - nhiều là trong hệ thống có nhiều người dùng (user), mỗi người dùng lại có nhiều vai trò (role) khác nhau ( quản lí, nhân viên ...) , mỗi một vai trò không chỉ được đăng kí cho một người dùng ( hệ thống có thể có nhiều quản lí, hoặc nhiều nhân viên)

Thông thường, chúng ta sẽ chỉ phải tạo hai bảng là bảng users và bảng roles, tuy nhiên nếu chỉ với hai bảng này chúng ta sẽ không thể truy vấn được. Vì vậy chúng ta cần phải tạo thêm một bảng thứ ba là bảng role_user. Cấu trúc của các bảng như sau:

users id - integer name - string
roles id - integer name - string
role_user user_id - integer role_id - integer

2. Cấu trúc Model:

Mối quan hệ nhiều - nhiều được định nghĩa bằng cách viết một phương thức trả về kết quả của phương thức belongsToMany:

namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model
{ /** * The roles that belong to the user. */ public function roles() { return $this->belongsToMany(Role::class); }
}

Trong ví dụ trên chúng ta đang định nghĩa phương thức Roles trong model User, tham số truyền vào cho phương thức belongsToMany là model liên quan ( ở đây là model Role)

Bạn cũng có thể thêm các thao tác để truy vấn. Ví dụ tìm các Roles của User có id là 1 và sắp xếp theo tên

$roles = User::find(1)->roles()->orderBy('name')->get();

Để chỉ ra tên của bảng trung gian, mặc định Laravel sẽ đặt theo kí tự bảng chữ cái, tuy nhiên bạn có thể ghi đè tính năng này bằng cách thêm tham số thứ hai vào phương thức belongsToMany

return $this->belongsToMany(Role::class, 'role_user');

Ngoài việc có thể thay đổi tên của bảng trung gian, bạn có thể thay đổi tên cột của bảng trung gian bằng cách thêm tham số vào phương thức belongsToMany. Tham số thứ ba là khóa ngoại của bảng mà bạn đang định nghĩa mối quan hệ ( hiện tại là bảng users), tham số thứ 4 là khóa ngoại của bảng mà bạn muốn ghép vào ( bảng roles)

return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id');

3. Định nghĩa mối quan hệ ngược:

Mối quan hệ này đặc biệt ở chỗ, mỗi quan hệ ngược định nghĩa giống hệt như mối quan hệ thuận. Giờ chúng ta sẽ định nghĩa mối quan hệ cho bảng Roles

 namespace App\Models; use Illuminate\Database\Eloquent\Model; class Role extends Model
{ /** * The users that belong to the role. */ public function users() { return $this->belongsToMany(User::class); }
}

4. Tài liệu tham khảo:

  • Eloquent: Relationships
  • Bình luận

    Bài viết tương tự

    - vừa được xem lúc

    RESTful API Design: Best Practices

    Hey hey hey hey, cuối năm cũng khá bận bịu công việc này kia nên cũng không có nhiều thời gian viết bài phục vụ anh em được. Nay mình xin chia sẻ một vài những tiêu chí mà mình hay sử dụng khi viết REST API.

    0 0 39

    - vừa được xem lúc

    18. Responsive là gì?

    Truy cập http://fullstack.edu.

    0 0 42

    - vừa được xem lúc

    19. Media queries?

    Truy cập http://fullstack.edu.

    0 0 43

    - vừa được xem lúc

    20. Tablet responsive

    Truy cập http://fullstack.edu.

    0 0 33

    - vừa được xem lúc

    21. Mobile menu responsive

    Truy cập http://fullstack.edu.

    0 0 32

    - vừa được xem lúc

    22. Mobile menu fix bug

    Truy cập http://fullstack.edu.

    0 0 25