связь между многими и многими

Я запускаю следующий код в одном из контроллеров laravel,

$organisation->users()->sync($members);

Однако я, кажется, получаю следующую ошибку с сервера,

{«error»: {«type»: «ErrorException», «message»: «preg_replace (): несоответствие параметра, шаблон — строка, а замена — массив», «file»: «/ Users / S / Sites / app -api / поставщик / Laravel / рамки / SRC / Осветите / Поддержка / helpers.php», «линия»: 885}}

Я думаю, что это жалоба на форму того, что я посылаю в синхронизацию в качестве аргумента, это массив, который выглядит так, как я полагаю, это потому, что я посылаю плохо отформатированный массив?

Чтобы построить массив, я отправляю в цикл синхронизации I массива, который отправляется в POST,

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

Я пытаюсь отправить массив, содержащий ключ, который является идентификатором членов, а затем я хочу отправить некоторые данные в сводную таблицу, которая является полем 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);

}

}

2

Решение

Да, ваш массив имеет неправильную структуру. Если вы посмотрите на документы (нужно немного прокрутить вниз) идентификатор должен быть ключом массива. Вот так:

array(
'1' => array('is_admin' => 1),
'85' => array('is_admin' => 0),
'86' => array('is_admin' => 0),
);

Вы можете сделать это с помощью небольшой модификации

foreach($postData['members'] as $member) {
if($member['admin'] == 1) {
$members[$member['id']] = array('is_admin' => 1);
} else {
$members[$member['id']] = array('is_admin' => 0);
}
}

Также вы можете написать это немного проще

foreach($postData['members'] as $member) {
$members[$member['id']] = array('is_admin' => $member['admin']);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]