Это моя строка запроса:
select `sku_alias`, `use_from_date`, `use_until_date`
from `catalog_alias`
where (`sku` = ? and `warehouses_id` = ?) and
((date(`use_from_date`) <= NOW() and date(`use_until_date`) >= NOW() or `use_until_date` is null))
limit 1
, сгенерированная из этого кода:
$whereCondition = [
['sku', '=', $sku],
['warehouses_id', '=', $wareHouseId]
];
$item = Alias::select('sku_alias', 'use_from_date','use_until_date')
->where($whereCondition)
->where(function($query){
$query->where(function($query_2){
$query_2->whereDate('use_from_date', '<=', DB::raw('NOW()'))->whereDate('use_until_date', '>=', DB::raw('NOW()'));
$query_2->orWhereNull('use_until_date');
});
})->first();
Результат $ item равен NULL
, мое $sku
значение 'XXXXXXX'
, которая является строкой, и я думаю, что мое условие where похоже на where (
sku = XXXXXXX and ....
, что приведет к ошибке mysql из-за отсутствия ''
.
Как я могу исправить эту проблему?Как мне изменить этот массив: ['sku', '=', $sku],
?
Спасибо
ОБНОВЛЕНИЕ: См. Ошибку mysql:
Если я использую прямой запрос:
$item = DB::select("select
`sku_alias`,
`use_from_date`,
`use_until_date`
from `catalog_alias`
where (`sku` = '{$sku}' and `warehouses_id` = '{$wareHouseId}') and
((date(`use_from_date`) <= NOW() and date(`use_until_date`) >= NOW() or `use_until_date` is null))
limit 1;");
Это работает, просто любопытно, почему первый тип запроса не работает?