2015-04-20 29 views
9

tôi tạo một dự án dựa trên vai trò với Laravel 5 và Entrust, mọi thứ hoạt động tốt cho đến khi tôi cố gắng cập nhật danh sách vai trò của người dùng, các đẫm máu "Liêm chính hạn chế vi phạm" làm tôi nhớ rằng khi gọiLaravel 5 Entrust vai trò cập nhật người dùng

$user->attachRoles($roles); 

Nó sẽ không xóa vai trò của người sử dụng đầu tiên, vì vậy tôi kiểm tra các giao diện của usertrait, sau đó đưa ra

$user->detachRoles($user->roles); 
$user->attachRoles($roles); 

mã này trông khá xấu xí, và tôi nghĩ rằng có ba SQL được thực hiện

vai trò
  • tìm của người dùng
  • xóa các quan hệ
  • thêm mối quan hệ mới

Tôi đã thực sự hy vọng nó sẽ giống như

$user->updateRoles($roles); 

mà có thể so sánh vai trò hiện tại, và làm một số optimazation .

Tôi có thiếu gì đó không?

+0

Vui lòng thêm một số định dạng mã. – Jost

Trả lời

12

Bạn có thể sử dụng chức năng $user->roles()->sync($roleKeys). Phải mất mảng các khóa vai trò và sau khi thực hiện tất cả các vai trò trước đó sẽ bị xóa.

+0

Tôi rất tiếc nhưng ai nên gọi phương thức đồng bộ hóa? '$ user-> sync ($ roleKyes)' có vẻ không hoạt động, "undefined method" error report. –

+0

Tôi đã chỉnh sửa câu trả lời một chút. Phương thức sync() được chạy trên phương thức xác định quan hệ Eloquent. –

+0

Tôi đã thử '$ user-> roles-> sync ($ rolesKeys)', vì vậy tôi đã kết thúc cuộc gọi sync() trên đối tượng Collection. Cảm ơn! –

Các vấn đề liên quan