gpt4 book ai didi

php - Laravel - 在 whereHas 中搜索包含 null 的关系

转载 作者:可可西里 更新时间:2023-10-31 22:40:30 25 4
gpt4 key购买 nike

我正试图找到一种方法来搜索关系。

所以,我有一对一的关系(User 和 UserDetails,其中某些用户可能没有详细信息)。

所以,问题是……我怎样才能根据详细信息搜索用户,而且没有详细信息的用户也必须包含在结果中。

例子:表用户:用户 ID、姓名、电子邮件- 1 John Doe johndoe@address.com- 2 理查德·蒂姆 richardtim@address.com- 3 迈克尔·伯德 michaelbird@address.com

表 user_details:ID、user_id、状态- 1, 1, 加利福尼亚州- 2, 2, 纽约

现在...我想获得所有来自加利福尼亚州的用户,以及所有没有州的用户(在上述情况下,结果应该是 John Doe 和 Michael Bird

这是用户模型中的关系:

public function details()
{
return $this->belongsTo('App\UserDetails', 'user_id', 'user_id');
}

搜索功能是:

$users = $users->whereHas('details', function($query) use $state {
$query->where('state', $state);
});

请记住,我必须使用 Eloquent /查询生成器的实例来做到这一点,我无法使用连接或原始查询。

在这种情况下,我想获取来自加利福尼亚的所有用户和所有非相关用户,但查询返回/仅搜索相关用户/user_details...

那么,有人可以帮助我吗?谢谢

更新:

我正在尝试:

$users = new User();
$users = $users->doesntHave('user_details')->orWhereHas('user_details', function($query) use($state) {
$query->whereIn('state', $state);
});
$users->where('created_at', '>=', $start_date);
$users->where('created_at', '<=', $end_date);

最佳答案

您可以使用 doesntHave连同orWhereHas创建所需的查询:

User::doesntHave('details')->orWhereHas('details', function($query) {
$query->where('state', '=', $state);
})->where('users.created_at', '>=', $start_date)
->where('users.created_at', '<=', $end_date)
->get();

关于php - Laravel - 在 whereHas 中搜索包含 null 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029961/

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