Как вставить несколько строк в сводную таблицу с помощью Eloquent? - PullRequest
2 голосов
/ 24 сентября 2019

У меня есть сводная таблица с именем user_machine_pivot, которая соединяет две таблицы: user & machines, и при создании нового пользователя я выбираю машины, на которых он может работать, из раскрывающегося списка.То, что я пытаюсь достичь, - это когда я делаю запрос axios.post, я хочу вставить несколько строк в сводную таблицу с помощью user_id & machine_id.Вот мой код модели пользователя:

public function machine()
{
    return $this->belongsToMany(Machine::class, 'user_machine_pivot')->withTimestamps();
}

Мой axios.post запрос содержимого из телескопа: {

full_name: "RandomName",
username: "RandomName",
password: "********",
machines: [
3,
2
]
}

Мой UserController:

$user = User::create($validatedUserData);
$user->machine()->attach($user->id, ['machine_id' => $machines]);

Сначала япроверяю данные пользователя и создаю пользователя, а затем пытаюсь присоединить пользователя к машинам в сводной таблице.Любая помощь и указатели приветствуются.

1 Ответ

2 голосов
/ 24 сентября 2019
$user->machine()->attach($user->id, ['machine_id' => $machines]);

Это не правильно.У вас уже есть $user, и вы хотите прикрепить определенный machine, поэтому вам нужно передать этот идентификатор machines()->attach():

$user = User::create($validatedUserData);
$machine = ...; 
// Not sure how you're getting `$machines`, and it should be singular `$machine`

$user->machines()->attach($machine->id, [...]);
// Replace `[...]` with any additional columns.

Обратите внимание, что если вы хотите прикрепить несколько, вы используетеattach() или sync():

$user->machines()->attach($machines);
$user->machines()->sync($machines); 

attach() лучше всего использовать, если к вам прикреплены существующие записи, так как sync() будет detach(), затем attach() ids, который вы передаете,Кроме того, если вам нужны дополнительные столбцы, настройте $machines, чтобы он был ассоциативным массивом:

$machines = [
  1,
  2 => ["additional" => "column"],
  3
]; // Etc. etc.
...