我想把我的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,'...
我的larvel控制器代码正在关注并且可以正常使用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');
答案 0 :(得分:1)
我认为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');
答案 1 :(得分:0)
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');