gpt4 book ai didi

php - Laravel 加入查询无法正常工作

转载 作者:行者123 更新时间:2023-11-29 01:55:05 26 4
gpt4 key购买 nike

我正在尝试通过连接查询获取用户列表,但它无法正常工作。我想检索除当前 user_id 之外的所有用户。我传入了一个要排除的 user_id,但结果返回了所有用户,它应该有一个除当前 user_id 之外的所有用户的列表。

它还从首选项表而不是用户表返回行 ID 值。

这是我的查询。

$query = DB::table('users')
->join('preferences', function($join) use($results) {
$join->on('users.id', '=', 'preferences.UserId')
->where('preferences.ClassIdFrom', '>=', $results->ClassIdFrom)
->where('preferences.ClassIdTo', '<=', $results->ClassIdTo);
})
->where('users.id', '!=',$UserId)
->whereNotIn('users.id', $mid_query)
->whereNotIn('users.id', $last_query);

$result = $query->get();

如果我使用 22 的 user_id 运行查询,结果不应该包括该用户,所以这不起作用。

->where('users.id', '!=',$UserId)

结果再次正确返回用户表中的所有列,除了 id 列值来自首选项表。

加入后我觉得

                    ->where('users.id', '!=',$UserId)
->whereNotIn('users.id', $mid_query)
->whereNotIn('users.id', $last_query);

三个都不行

最佳答案

如果您没有指定要选择的字段,您将执行一个select *。执行此操作时,如果多个表具有相同的字段名称(例如 id),检索到的最终值将来自具有该字段的最后一个表。在这种情况下,preferences 表位于 users 表之后,因此两个表中具有相同名称的任何字段都将以 preferences< 中的数据结尾 表。

快速解决方法是指定您的选择语句:

$query = DB::table('users')
->join('preferences', function($join) use($results) {
$join->on('users.id', '=', 'preferences.UserId')
->where('preferences.ClassIdFrom', '>=', $results->ClassIdFrom)
->where('preferences.ClassIdTo', '<=', $results->ClassIdTo);
})
->where('users.id', '!=',$UserId)
->whereNotIn('users.id', $mid_query)
->whereNotIn('users.id', $last_query)
->select('users.*');

额外

如果您要设置您的 Eloquent 模型和关系,您也可以使用 Eloquent ORM 执行此查询。

$users = User::whereHas('preferences', function($query) use ($results) {
$query->where('ClassIdFrom', '>=', $results->ClassIdFrom)
->where('ClassIdTo', '<=', $results->ClassIdTo);
})
->where('id', '!=',$UserId)
->whereNotIn('id', $mid_query)
->whereNotIn('id', $last_query)
->get();

此外,您可以稍微清理一下位置:

$ids = array_merge(array($UserId), $mid_query, $last_query);
$users = User::whereHas('preferences', function($query) use ($results) {
$query->where('ClassIdFrom', '>=', $results->ClassIdFrom)
->where('ClassIdTo', '<=', $results->ClassIdTo);
})
->whereNotIn('id', $ids)
->get();

关于php - Laravel 加入查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351575/

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