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']);
831   1  

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

    Ничего не найдено.