【发布时间】:2020-06-25 03:21:32
【问题描述】:
我知道有些人会说这是一个重复的问题。 等等,我有一个特殊的情况,到目前为止我在任何其他帖子上都没有发现。
我有一个用户模型 (User.php) 和一个团队模型 (Team.php)。
用户属于一个团队。一个团队有很多用户。
在用户模型中,我有这个属性(列)“类型”。
从团队模型中,我想在数据表中显示所有团队的列表,其中包含类型为“初学者”的用户。
User.php
protected $with = ['team'];
public function team(){
return $this->belongsTo(Team::class);
}
Team.php
public function members(){
return $this->hasMany(User::class)->where('users.type','=','beginner');
}
如您所见,我已经在过滤要显示的用户了。
假设我有以下数据:
团队
Team one: User 1 (type: intermediate), User 2 (type: intermediate)
Team two: User 3 (type: beginner), User 4 (type: beginner)
Team three: User 5 (type: beginner), User 6 (type: beginner)
但是,当我获得团队列表时,所有团队都会显示出来,这是我不想要的。
| Team | Members |
--------------------------------|
| Team one | |
| Team two | User 3, User 4 |
| Team three | User 5, User 6 |
---------------------------------
在这种情况下,我想要的是不显示“Team one”。这部分有效,因为没有为第一组显示任何成员。
我第一次尝试:
$teams = Team::with('members')->get();
然后是这个:
$teams = Team::with(['members'=>function($query){
$query->where('users.type','beginner');
}])->get();
但它不会过滤掉不受欢迎的团队。
关于如何实现这一点的任何想法?
【问题讨论】: