2016-03-06 13 views
5

Ben iki çok-çok ilişkisi:Çoktan çoğa ilişki kaydetme, senkronizasyon/ek mevcut değil mi? 2 modeller örnek

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'); 
    } 

} 

ve

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'); 
    } 
} 

Ya burada yapmaya çalışıyorum, yeni Rolü olabilir nerede bir sayfa oluşturmaktır oluşturulur ve zaten oluşturulmuş İzinleriyle bu rolü ilişkilendirmek:

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

ve denetleyici içinde bu sayfada seçilen izinleri ayıklamak ve her kurtarmaya çalıştı şey:

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

son deyimi aşağıdaki hatayı alıyorum yürütüldüğünde Ancak sonra: exception 'BadMethodCallException' with message 'Method sync does not exist. ' Ben de attach için olsun aynı hata. Ayrıca, bir yere permission_role ara tablosunun adını vermem gerekiyor mu emin değilim? Teşekkürler.

cevap

9

Aşağıdaki kullanmak gerekir: Bazı daha açıklamalar:

$role->permissions bir Koleksiyonu örneğidir

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

()

DÜZENLEMEYİ unutmayın.

$role->permissions()sync() yöntemini olmadan da çalışır

+0

içeren bir belongsToMany örneğidir '()' –

+2

Hayır, ben sadece test edilmiş ve '()' olmadan tam aynı hata var etmez. Bunun nedeni, '$ role-> permissions' bir Collection örneğidir ve '$ role-> permissions()' 'sync()' yöntemini içeren bir belongsToMany örneğidir :) – Hammerbot

+0

Teşekkürler, işte bu kadar. – Zed

İlgili konular