Я пытаюсь сохранить данные в сводной таблице с дополнительным полем под названием data.
когда я сохраняю, у меня есть этот массив:
[
5 => "files"4 => "pictures"3 => "tags"1 => "thumbs"]
Моя таблица выглядит так:
Идентификаторы, показанные выше, ссылаются на option_id и строку с именем внутри базы данных.
Когда я пытаюсь использовать синхронизацию следующим образом: $ project-> options () -> sync ($ data);
$ data — массив, показанный выше
Я получаю сообщение об ошибке, которое пытается сохранить option_id с «файлами».
Вот как я собираю данные, которые я использую для синхронизации:
Я пытаюсь получить то, что вы предложили, но не знаю, как этого добиться:
вот как я собираю массив:
foreach($request->input('option_id') as $id) {
$option['option_id'][] = $id;
$option['data'][] = $request->input('data')[$id];
}
$data = array_combine($option['option_id'], $option['data']);
Это покрыто в руководство:
Добавление сводных данных при синхронизации
Вы также можете связать другие значения сводной таблицы с данными идентификаторами:
$user->roles()->sync(array(1 => array('expires' => true)));
В вашем примере вы должны изменить свой массив, чтобы он выглядел примерно так, как показано ниже, но я считаю, что это будет означать:
$data = [
5 => [ 'name' => "files" ],
4 => [ 'name' => "pictures" ],
3 => [ 'name' => "tags" ],
1 => [ 'name' => "thumbs" ],
];
$project->options()->sync($data);
Я полагаю, что вам также может понадобиться изменить Project
модель относится к вашему Options
модель:
// File: app/model/Project.php
public function options()
{
return $this->belongsToMany('Option')->withPivot('name');
}
Это также отмечено на странице руководства по ссылке:
По умолчанию только ключи будут присутствовать в объекте сводки. Если ваша сводная таблица содержит дополнительные атрибуты, вы должны указать их при определении отношения.
Обновить
Попробуйте создать свой $data
массив, как это:
$data = [];
foreach($request->input('option_id') as $id) {
$data[$id] = [ 'name' => $request->input('data')[$id] ];
}
Других решений пока нет …