tp5 where里面使用DB::raw() 无法使用使用whereor
如题,例如下面的代码可以正常生效:
$extra_where = function ($query) use ($room_numbers) { foreach ($room_numbers as $roomNumber) { $query->whereor('room_number_with_floor', 'like', "%{$roomNumber}%"); } }; $house_ids = House::where($extra_where)->column('id');
但是如果改成这样的:
$extra_where = function ($query) use ($ids) { foreach ($ids as $id) { $query->whereor(DB::raw(find_in_set("{$id},ids"))); } }; $houses = House::where($extra_where)->column('id');
这样生成的sql就会没有or间隔符,为之替换的是and,原因可能是DB::raw()使用了原生sql,就不会使用自带的whereor里面的逻辑符
如果不想使用原生sql则可以使用arrayWhereToCallbackWhere方法。