Laravel, где условие вопроса - PullRequest
0 голосов
/ 22 октября 2018

Это моя строка запроса:

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: enter image description here

Если я использую прямой запрос:

$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;");  

Это работает, просто любопытно, почему первый тип запроса не работает?

...