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方法。

发表回复

您的电子邮箱地址不会被公开。