【发布时间】:2015-02-14 22:44:01
【问题描述】:
我在其中一个 laravel 控制器中运行以下代码,
$organisation->users()->sync($members);
但是我似乎从服务器收到以下错误,
{"error":{"type":"ErrorException","message":"preg_replace(): 参数不匹配,pattern是字符串而replacement是数组","file":"/Users/S/站点/app-api/vendor/laravel/framework/src/Illuminate/Support/helpers.php","line":885}}
我认为它在抱怨我作为参数发送到同步的形式,这是一个看起来像这样的数组我假设这是因为我发送了一个格式错误的数组?
要构建我发送到 POST 中发送的数组的同步 I 循环的数组,
foreach($postData['members'] as $member) {
if($member['admin'] == 1) {
$members[] = array($member['id'] => array('is_admin' => 1));
} else {
$members[] = array($member['id'] => array('is_admin' => 0));
}
}
我正在尝试发送一个包含成员 ID 键的数组,然后我还想将一些数据发送到数据透视表,这是一个字段 is_admin,值可以是 1 或 0 .
如果我在运行同步之前返回 $members,laravel 会返回一些如下所示的 JSON,
[
{
"1":{"is_admin":1}
},
{
"85":{"is_admin":0}
},
{
"86":{"is_admin":0}
}
]
这是正确的格式吗?我做错了吗?
我现在遇到一个新错误,
谢谢你,我现在收到一个新错误,调用未定义的方法 Illuminate\Database\Query\Builder::sync()
为了清楚起见,这里是我的关系,
组织
public function users()
{
return $this->belongsToMany('User')->withPivot('is_admin');
}
用户
public function organisations()
{
return $this->belongsToMany('Organisation')->withPivot('is_admin');
}
假设多对多关系具有同步关系,我错了吗?
这里是完整的方法,
public function update($id)
{
//eturn Input::all('name');
$postData = Input::all();
$organisation = Organisation::find($id);
if(!empty($postData['group_name'])) {
$organisation->name = $postData['group_name'];
} else {
$organisation->name = $postData['name'];
}
$organisation->information = $postData['information'];
$organisation->type = $postData['type'];
$organisation->slug = $this->createSlug($postData['name']);
//Sort out the members are they admins etc.
if(isset($postData['members'])) {
$members = array();
foreach($postData['members'] as $member) {
$members[$member['id']] = array('is_admin' => $member['admin']);
}
}
if(isset($postData['clients'])) {
$clients = array();
foreach($postData['clients'] as $client) {
$clients[] = $client['id'];
}
}
if(isset($postData['projects'])) {
$projects = array();
foreach($postData['projects'] as $project) {
$projects[] = $project['id'];
}
}
if( $organisation->save() ) {
if(isset($members)) {
$organisation->users()->sync($members);
}
if(isset($clients)) {
$organisation->clients()->sync($clients);
}
if(isset($projects)) {
$organisation->projects()->sync($projects);
}
$organisation->load('users');
$organisation->load('teams');
$organisation->load('clients');
$organisation->load('projects');
return Response::make("success", 200);
} else {
return Response::make("Something has gone wrong", 500);
}
}
【问题讨论】:
标签: php laravel relational-database eloquent pivot-table