我有一个这样的数据库:
Portal: id
User: id,portal_id
Item: id,user_id
我希望在一个集合中获取门户网站中用户的所有项目。
我有用户名。
我可以用数组甚至纯SQL来做到这一点,但我想知道是否有更好的方法:
$users = user::where("portal_id",Auth::user()->portal_id)->get();
$i = 0;
foreach($users as $user){
$items[$i] = item::where("user_id",$user->id)->get();
$i++
}
我希望所有内容都在同一个集合中,而不是数组。
有什么建议吗?
答案 0 :(得分:3)
您需要在Item
和User
之间定义belongsTo()
关系:
public function user()
{
return $this->belongsTo('App\User');
}
并使用whereHas()
过滤项目:
Item::whereHas('user', function ($) {
$q->where("portal_id", auth()->user()->portal_id);
})->get();