#php #laravel #eloquent #many-to-many
#php #laravel #красноречивый #многие ко многим
Вопрос:
У меня есть пользователи и операторы, и у каждого пользователя может быть только один оператор, но у оператора может быть много пользователей
Итак, в операторной модели у меня есть:
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>
В форме отправки, которая разместила бы массив всех выбранных $ profiles (это пользователи из таблицы user)
Что для меня немного сложно, так это когда я создаю нового оператора и выбираю, каких пользователей присоединять к operator, я не знаю, как я мог бы добавить их и синхронизировать без сводной таблицы, и мне вообще не нужна сводная таблица для этого.
у меня есть operators
таблица, и в ней должны содержаться идентификаторы оператора и управляемых пользователей
---- ------------- ---------
| id | operator_id | user_id |
---- ------------- ---------
| 1 | 3 | 23 |
| 2 | 3 | 28 |
| 2 | 3 | 36 |
---- ------------- ---------
Итак, как я могу добавить (прикрепить или подключить) идентификаторы пользователей операторов и управляемых пользователей в таблицу operators?
Вот мой текущий код контроллера
$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:
Просто используйте eloquent для выполнения объединения.
DB::select("SELECT * FROM Users u
INNER JOIN operators o dp ON u.id = o.user_id;");
Просто убедитесь, что вы выполняете объединения для каждой таблицы, к которой вам нужно подключиться