Laravel ManyToMany关系并在没有输入表数组的数据透视表的情况下进行附加

时间:2019-04-01 18:36:01

标签: php laravel eloquent many-to-many

我有用户和操作员,每个用户只能有一个操作员,但操作员可以有很多用户

所以在Operator模型中,我有:

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列表(这些是用户表中的用户)

对我来说,棘手的是当我创建新的运算符并选择要附加到该运算符的用户时,我不知道如何在没有数据透视表的情况下添加和同步他们,并且我不需要数据透视表对此完全没有问题。

我有operators表,该表应包含操作员ID和受管理用户ID

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

那么如何在操作员表中添加(附加或连接)操作员和受管用户的用户ID?

这是我当前的控制器代码

  $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 :(得分:0)

只需雄辩地进行联接即可。

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

只需确保对需要连接的每个表进行联接