gpt4 book ai didi

php - Laravel 5.6 Eloquent ORM where 连接表

转载 作者:行者123 更新时间:2023-12-01 00:36:23 24 4
gpt4 key购买 nike

我正在处理 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 Collection,直到现在我正在做以下事情:

$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();

关于php - Laravel 5.6 Eloquent ORM where 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com