我正在尝试从数据库查询中访问数据,我认为这需要加入。我有许多用户可以分开。我正在使用belongsToMany 关系。我的模型就是这样
class User extends Model
{
protected $table = 'users';
protected $guarded = [];
public function group()
{
return $this->belongsToMany('App\Group', 'users_user_groups')->withPivot('user_id', 'group_id');
}
}
class Group extends Model
{
protected $table = 'user_groups';
protected $guarded = [];
use SoftDeletes;
public function user()
{
return $this->belongsToMany('App\User', 'users_user_groups')->withPivot('user_id', 'group_id');
}
}
当我运行我需要的所有内容时,我可能会获得如下数据。
users
+----+---------------+
| id | name |
+----+---------------+
| 1 | John Doe |
+----+---------------+
user_groups
+----+---------------+-----------------+
| id | name | description |
+----+---------------+-----------------+
| 1 | Group AA | Something |
+----+---------------+-----------------+
| 2 | Group BB | Something |
+----+---------------+-----------------+
users_user_groups
+----+---------------+-----------------+
| id | user_id | group_id |
+----+---------------+-----------------+
| 1 | 1 | 1 |
+----+---------------+-----------------+
| 2 | 1 | 2 |
+----+---------------+-----------------+
所以我知道id为1的用户属于user_groups,id为1和2.我想要做的就是抓住我数据库中的所有用户 属于名为admin的user_group。所以我正在尝试这样的事情
DB::table('users')->select('userName')
->join('user_groups', 'users_user_groups')
->where('name', '=', 'admin')->get();
我知道这是错的,如何在使用belongsToMany和数据透视表时获取组内的所有用户?
由于
答案 0 :(得分:1)
Eloquent使用关系,而不是查询构建器。
你可以通过这样的方式实现你的目标:
$group = Group::where('name', 'admin')->first();
$users = $group->users; // Where users is the name of your relationship (At the moment you have user)
将会执行两个SQL语句并将它们映射到雄辩的对象中,而不是连接。这些陈述看起来像这样:
select * from user_groups where name = ? and deleted_at is not null limit 1
select * from users where id in (?, ?)
如果您有一个实例Group
,则通过调用它来执行该关系,就好像它是一个属性一样。因此,$users
之后将包含User
个实例的集合,因此您可以循环遍历它们:
foreach ($users as $user) {
// Do something with $user
}