我要把我的laravel应用程序数据库mysql更改为postgres。我正在使用原始查询这是我的查询:
select IF (modelno="" OR modelno IS NULL,name,concat(name, " / ",modelno)) as name, id from `models` where `deleted_at` is null order by `name` asc
当我将此查询用于 Postgres 时,会引发以下异常。
位于 "" 处或附近的零长度分隔标识符 第 1 行:选择 IF (modelno=" OR modelno IS NULL,name,concat(name, '...
我的幼虫控制器代码如下,并且可以在 MySql 上正常工作:
DB::table('models')
->select(DB::raw('IF (modelno="" OR modelno IS NULL,name,concat(name, " / ",modelno)) as name, id'))
->orderBy('name', 'asc')
->whereNull('deleted_at')
->lists('name', 'id');
我不认为postgres支持IF,所以试试CASE:
DB::table('models')
->select(DB::raw('CASE WHEN modelno="" OR modelno IS NULL then name else concat(name, " / ",modelno) as name, id'))
->orderBy('name', 'asc')
->whereNull('deleted_at')
->lists('name', 'id');
Postgres 不支持 Query 中的IF
语句。但是这个问题的解决方案可以用where
类来处理。
下面是示例:
DB::table('models')
->select(DB::raw("concat(name, modelno) as name, id"))
->orderBy('name', 'asc')
->where('modelno','=','')
->whereNull('deleted_at')
->orWhereNull('modelno')
->lists('name', 'id');