Связи Laravel ManyToMany и присоединение без сводной таблицы из массива поля ввода - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть пользователи и операторы, и у каждого пользователя может быть только один оператор, но у оператора может быть много пользователей

Итак, в модели оператора у меня есть:

public function profile() {
  return $this->hasMany(User::class);
}

И в модели пользователяу меня есть:

public function operator() {
  return $this->hasOne(Operator::class);
}

Так что я думаю, что у меня есть правильные отношения?

Теперь, если у меня есть поле ввода для управления операторами, и у меня есть поле множественного выбора, поэтому я могу выбрать много пользователей, чтобы добавитьдля этого оператора поле ввода будет выглядеть примерно так:

<select name="profiles[]" id="profiles" multiple="multiple" class="multiselect2 form-control">
  @foreach($profiles as $key => $profile)
  <option value="{{ $profile->id }}">{{ $profile->name }} {{ $profile->lastname }}</option>
  @endforeach
</select>

При отправке формы, которая будет публиковать массив всех выбранных $ профилей (это пользователи из пользовательской таблицы)

Что идетНемного сложно для меня, когда я создаю новый оператор и выбираю, каких пользователей присоединять к оператору, я не знаю, как я могу добавить их и синхронизировать, не имея сводной таблицы, и мне вообще не нужна сводная таблица для этого.

у меня есть таблица operators, и в ней должны храниться идентификаторы операторов и идентификаторов управляемых пользователей

+----+-------------+---------+
| id | operator_id | user_id |
+----+-------------+---------+
|  1 |           3 |      23 |
|  2 |           3 |      28 |
|  2 |           3 |      36 |
+----+-------------+---------+

Так как я могу добавить (присоединить или подключить) идентификаторы операторов и управляемых пользователей воператоры таble?

Вот мой текущий код контроллера

  $user = new User;

  $user->name = $request->name;
  $user->email = $request->email;
  $user->password = bcrypt($request->password);

  $user->save();

  $user->operator()->attach(['operator_id' => $user->id,  'profile_id' => $request->profiles]);

1 Ответ

0 голосов
/ 01 апреля 2019

Просто используйте eloquent для объединения.

DB::select("SELECT * FROM Users u
INNER JOIN operators o dp ON u.id = o.user_id;");

Просто убедитесь, что вы выполняете объединения для каждой таблицы, к которой вам нужно подключиться

...