[英]How to use alias for whereIn in laravel
Im trying to use whereIn()
method in laravel 5.2 but suddenly it returns a column not found error
.我试图在 laravel 5.2 中使用
whereIn()
方法,但它突然返回一个column not found error
。
Controller Controller
$users = \App\User::select([
DB::raw('(CASE WHEN users.id < 4 THEN users.id ELSE "" END) as user_id')
]);
$users->whereIn('user_id', [1,2,3]);
return $users->get();
Error错误
Column not found: 1054 Unknown column 'user_id'
未找到列:1054 未知列 'user_id'
the whereIn can be apply only on a column, since you do not have that column, simply make it! whereIn 只能应用于列,因为您没有该列,只需创建它!
you can do this using sub query then join it :您可以使用子查询执行此操作,然后加入它:
$query1 = $users = \App\Models\User::select([
DB::raw('users.id as id_to_join,(CASE WHEN users.id < 4 THEN users.id ELSE "" END) as user_id')
]);
$value=User::joinSub($query1,'query1',function ($join){
$join->on('users.id', '=', 'query1.id_to_join');
})->whereIn('user_id', [1,2,3])->get();
in case your laravel version did not support joinsub, you can do it using query builder:如果您的 laravel 版本不支持 joinsub,您可以使用查询生成器执行此操作:
$value=DB::table('users')->join(
DB::raw('(select users.id as id_to_join ,(CASE WHEN users.id < 4 THEN users.id ELSE "" END) as user_id from users)subJoin')
,function($join){
$join->on('users.id', '=', 'subJoin.id_to_join');
})->whereIn('user_id', [1,2,3])->get();
Your logic seems to be that user ID values greater than 3 are to be disregarded.您的逻辑似乎是大于 3 的用户 ID 值将被忽略。 If so, then just check the
id
column directly in your call to whereIn()
:如果是这样,那么只需在调用
whereIn()
时直接检查id
列:
$users = \App\User::select([
DB::raw('(CASE WHEN users.id < 4 THEN users.id ELSE "" END) as user_id')
]);
$users->whereIn('id', [1,2,3]);
return $users->get();
If you really needed to reuse the alias in the same level of the query, avoiding a subquery, you could use MySQL's overloaded HAVING
clause:如果您确实需要在同一级别的查询中重用别名,避免子查询,您可以使用 MySQL 的重载
HAVING
子句:
$users = \App\User::select([
DB::raw('(CASE WHEN users.id < 4 THEN users.id ELSE "" END) as user_id')
]);
$users->havingRaw('user_id in (1,2,3)')
return $users->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.