[英]Laravel 5.6 Eloquent ORM where join table
我正在处理雄辩的ORM集合和查询生成器。 我试图弄清楚如何在集合中(如在查询生成器中)加入和使用“ where”。
例如,我有下表:
用户数 :
ID | Name | Last name
-------------------------
1 | Martin | Fernandez
2 | Some | User
人数 :
ID | Nick | User_ID | Active
----------------------------------
1 | Tincho | 1 | 1
公司 :
ID | Name | User_ID | Active
----------------------------------
1 | Maramal| 1 | 0
2 | Some | 2 | 1
这是一个示例,我正在处理的表每个都有30多个列。 我想选择所有活动的用户。
通常我会这样查询:
SELECT *
FROM users
LEFT JOIN persons ON users.id = persons.user_id
LEFT join companies ON users.id = companies.user_id
WHERE persons.active = 1
OR companies.active = 1
可以将其转换为Laravel查询生成器,例如:
DB::table('users')
->leftJoin('persons', 'users.id', '=', 'persons.user_id')
->leftJoin('companies', 'users.id', '=', 'companies.user_id')
->where('persons.active', 1)
->orWhere('companies.active', 1)
->get();
但是我要使用的是Laravel Eloquent ORM集合,到目前为止,我正在执行以下操作:
$users= User::orderBy('id',' desc')->get();
foreach($users as $k => $user) {
if($user->company && !$user->company->active || $user->person && !$user->person->active) {
unset($users[$k]);
}
... and here a lot of validations and unsets ...
}
但是我知道到这一点,我已经抓住了所有用户,而不是那些活跃的用户。
如何实现集合中查询生成器的功能? 提前致谢。
应该这样做:
$users = User::whereHas('companies', function($q) {
$q->where('active', true);
})->orWhereHas('persons', function($q) {
$q->where('active', true);
})->with(['companies', 'persons'])->orderBy('id', 'desc')->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.