保存多对多关系,同步/附加不存在?
Posted
技术标签:
【中文标题】保存多对多关系,同步/附加不存在?【英文标题】:Saving many-to-many relationship, sync/attach doesn't exist? 【发布时间】:2016-06-20 00:15:46 【问题描述】:我在多对多关系中有两个以下 2 个模型:
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');
我在这里尝试做的是创建一个可以创建新角色的页面,并将该角色与已创建的权限相关联:
@foreach ($permissions as $permission)
<label class="checkbox">
<input type="checkbox" value=" $permission->id " name="permissions[]" id="permission_ $permission ">
$permission->permission_title
</label>
@endforeach
在控制器中,我尝试从页面中提取选定的权限并保存所有内容:
// logic to save role
$role->save();
$permissions = Input::get('permissions');
$role->permissions->sync($permissions);
但是在执行最后一条语句后,我收到以下错误:
exception 'BadMethodCallException' with message 'Method sync does not exist.
'
attach
也出现同样的错误。另外,我不确定是否应该在某处提供中间表的名称 permission_role
?谢谢。
【问题讨论】:
【参考方案1】:您需要使用以下内容:
$role->permissions()->sync($permissions);
别忘了()
编辑:更多解释:
$role->permissions
是一个集合实例。
$role->permissions()
是一个包含sync()
方法的belongsToMany
实例
【讨论】:
以上是关于保存多对多关系,同步/附加不存在?的主要内容,如果未能解决你的问题,请参考以下文章