Laravel: дополнительная синхронизация полей с массивом

Я пытаюсь сохранить данные в сводной таблице с дополнительным полем под названием data.

когда я сохраняю, у меня есть этот массив:

 [
5 => "files"4 => "pictures"3 => "tags"1 => "thumbs"]

Моя таблица выглядит так:

  • project_id
  • option_id
  • название

Идентификаторы, показанные выше, ссылаются на 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']);

3

Решение

Это покрыто в руководство:

Добавление сводных данных при синхронизации

Вы также можете связать другие значения сводной таблицы с данными идентификаторами:

$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] ];
}
11

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

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

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