У меня есть модель под названием «Консоль», где у меня есть прицел, который выглядит следующим образом:
public function scopeOfFinalsSent($query, $set)
{
if ($set) {
return $query->whereNotNull('finals_sent')->where(function ($query) {
$query->where('final_weight', '>=', 'current_weight')
->where('final_cbm', '>=', 'current_cbm');
});
}
return $query;
}
Я использую его так:
return Consol::ofFinalsSent(true)->count();
При использовании этого область вместе с MS SQL, я получаю следующее сообщение об ошибке:
SQLSTATE [42000]: [Microsoft] [ODB C Драйвер 17 для SQL Сервер] [SQL Сервер] Ошибка преобразования типа данных nvarchar в число c. (SQL: выберите количество (*) в качестве агрегата из [consols], где [first_etd] между 2020-04-20 и 2020-04-26 и [finals_sent] не равно нулю и ([final_weight]> = current_weight и [final_cbm] ]> = current_cbm))
Обратите внимание: если я переключусь на MySQL, я не получу вышеуказанную ошибку.
Я попытался отладить фактический запрос, используя метод toSql()
, в моей области. Запрос, который я выполняю, выглядит следующим образом:
select * from [consols] where [first_etd] between '2020-04-20' and '2020-04-26' and [finals_sent] is not null and ([final_weight] >= "current_weight" and [final_cbm] >= "current_cbm")
При запуске этого запроса непосредственно в SQL Server Management Studio для фактической таблицы запрос выполняется отлично.
Ниже приведена схема для таблицы: