【发布时间】:2018-08-07 15:16:34
【问题描述】:
我正在处理 Eloquent 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 ...
}
但我知道,此时我已经抓住了所有用户,而不是那些活跃的用户。
如何在集合中使用查询生成器实现我所做的工作?提前致谢。
【问题讨论】:
标签: php mysql laravel laravel-5 mariadb