ho due seguenti 2 modelli in molti-a-molti:Salvataggio della relazione molti a molti, sincronizzazione/collegamento non esiste?
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');
}
}
e
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');
}
}
Quello che sto cercando di fare qui, è quello di creare una pagina in cui nuovo ruolo può essere creato, e associo quel ruolo delle autorizzazioni già create:
@foreach ($permissions as $permission)
<label class="checkbox">
<input type="checkbox" value="{{ $permission->id }}" name="permissions[]" id="permission_{{ $permission }} }}">
{{ $permission->permission_title }}
</label>
@endforeach
e nel controller ho provato questo per estrarre i permessi selezionati dalla pagina e salvare ogni cosa:
// logic to save role
$role->save();
$permissions = Input::get('permissions');
$role->permissions->sync($permissions);
Tuttavia dopo l'ultima istruzione viene eseguita ottengo il seguente errore: exception 'BadMethodCallException' with message 'Method sync does not exist.
' Lo stesso errore che ottengo per attach
pure. Inoltre, non sono sicuro se dovrei fornire da qualche parte il nome del tavolo intermedio permission_role
? Grazie.
Funziona anche senza '()' –
No, non ho appena testato ed ha ottenuto lo stesso errore esatto senza il '()'. Questo perché '$ role-> permissions' è un'istanza di Collection, e' $ role-> permissions() 'è un'istanza di OwnToMany che contiene il metodo' sync() ':) – Hammerbot
Grazie, è tutto. – Zed