Laravel: дополнительная синхронизация поля с массивом
Я пытаюсь сохранить данные внутри сводной таблицы с дополнительным полем, называемым data.
Когда я сохраняю, у меня есть этот массив:
[
5 => "files"
4 => "pictures"
3 => "tags"
1 => "thumbs"
]
Моя таблица выглядит так:
- project_id
- option_id
- имя
Идентификаторы, показанные выше, относятся к option_id и строке для имени внутри базы данных.
Когда я пытаюсь использовать синхронизацию следующим образом: $project - >options () - >sync ($data);
$data-это массив, показанный выше
Я получаю ошибку, которая его попытка сохранить option_id с помощью "files".
Вот как я строю данные, которые я использую для синхронизации:
Я пытаюсь получить то, что вы предложили, но не знаю, как этого достичь:
Вот как я строю массив:
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']);
1 ответ:
Добавление Сводных Данных При Синхронизации
Вы также можете связать другие значения сводной таблицы с заданными идентификаторами:
$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'); }Это также отмечено в ссылка на страницу руководства:
По умолчанию в объекте pivot будут присутствовать только ключи. Если сводная таблица содержит дополнительные атрибуты, их необходимо указать при определении связи.
Обновить
Попробуйте создать свой массив
$dataследующим образом:$data = []; foreach($request->input('option_id') as $id) { $data[$id] = [ 'name' => $request->input('data')[$id] ]; }
Comments