2016-03-06 15 views
5

Tôi có hai sau 2 mô hình trong nhiều-nhiều mối quan hệ:Lưu mối quan hệ nhiều-nhiều, đồng bộ hóa/đính kèm không tồn tại?

use Illuminate\Database\Eloquent\Model; 

class Permission extends Model 
{ 
    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'permissions'; 

    /* 
    |-------------------------------------------------------------------------- 
    | Relationship Methods 
    |-------------------------------------------------------------------------- 
    */ 

    /** 
    * many-to-many relationship method 
    * 
    * @return QueryBuilder 
    */ 
    public function roles() 
    { 
     return $this->belongsToMany('App\Admin\Role'); 
    } 

} 

class Role extends Model 
{ 
    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'roles'; 

    /* 
    |-------------------------------------------------------------------------- 
    | Relationship Methods 
    |-------------------------------------------------------------------------- 
    */ 

    /** 
    * many-to-many relationship method. 
    * 
    * @return QueryBuilder 
    */ 
    public function users() 
    { 
     return $this->belongsToMany('App\Admin\User'); 
    } 

    /** 
    * many-to-many relationship method. 
    * 
    * @return QueryBuilder 
    */ 
    public function permissions() 
    { 
     return $this->belongsToMany('App\Admin\Permission'); 
    } 
} 

Những gì tôi đang cố gắng để làm ở đây, là để tạo ra một trang nơi Vai trò mới có thể đã tạo và liên kết vai trò đó với quyền đã tạo Quyền:

@foreach ($permissions as $permission) 
          <label class="checkbox"> 
           <input type="checkbox" value="{{ $permission->id }}" name="permissions[]" id="permission_{{ $permission }} }}"> 
           {{ $permission->permission_title }} 
          </label> 
         @endforeach 

và trong bộ điều khiển Tôi đã cố gắng trích xuất các quyền đã chọn từ trang này và lưu mọi điều:

// logic to save role 
$role->save(); 
$permissions = Input::get('permissions'); 
$role->permissions->sync($permissions); 

Tuy nhiên sau khi báo cáo kết quả cuối cùng được thực hiện tôi nhận được lỗi sau: exception 'BadMethodCallException' with message 'Method sync does not exist. ' Các lỗi tương tự tôi nhận được cho attach là tốt. Ngoài ra, tôi không chắc liệu tôi có nên cung cấp đâu đó tên của bảng trung gian permission_role không? Cảm ơn.

Trả lời

9

Bạn cần phải sử dụng như sau:

$role->permissions()->sync($permissions); 

Đừng quên ()

EDIT: Một số giải thích hơn:

$role->permissions là một trường hợp Bộ sưu tập.

$role->permissions() là một trường hợp belongsToMany trong đó có phương pháp sync()

+0

Nó cũng hoạt động mà không '()' –

+2

Không, nó không tôi chỉ thử nghiệm và có những lỗi chính xác cùng mà không có '()'. Đó là bởi vì '$ role-> permissions' là một cá thể Collection, và' $ role-> permissions() 'là một thể hiện của attributeToTo có chứa phương thức' sync() ':) – Hammerbot

+0

Cảm ơn, đúng vậy. – Zed

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