#php #mysql #laravel #eloquent #mysql-workbench
Вопрос:
Я пытаюсь преобразовать запрос MYSQL в формат Laravel Eloquent, версия MYSQL возвращает значение на рабочем столе MySQL, но версия Eloquent возвращает нулевое значение с теми же параметрами запроса.
вот версия запроса MYQSL
" select
SUM(
DATEDIFF(
if( end_date > $end_date, $end_date, end_date ),
if( start_date < $start_date, $start_date, start_date )
) * child_rate
)
from rates where start_date < $end_date and end_date > $start_date
";
вот красноречивая версия Ларавеля
$rate_query = "
SUM(
DATEDIFF(
if( end_date > $end_date, $end_date, end_date ),
if( start_date < $start_date, $start_date, start_date )
) * child_rate
)
";
$total_child_rate = DB::table('rates')
->selectRaw(DB::raw($rate_query))
->where('start_date', '<', $end_date)
->where('end_date', '>', $start_date)
->get();
что я делаю не так?
Edited this question to show the answer below
Правильный способ написания необработанного запроса-это обернуть запрос в a single qoute
. Ниже приведено решение проблемы после ответа @damask
$rate_query = '
SUM(
DATEDIFF(
if( end_date > ?, ?, end_date ),
if( start_date < ?, ?, start_date )
) * child_rate
)
';
$total_child_rate = DB::table('rates')
->selectRaw(DB::raw($rate_query), [$end_date, $end_date, $start_date, $start_date])
->where('start_date', '<', $end_date)
->where('end_date', '>', $start_date)
->get();
Ответ №1:
Может быть, потому, что вы устанавливаете $rate_query
, используя двойные кавычки, $end_date
и $start_date
оцениваетесь как переменные php? Попробуйте использовать одинарные кавычки или сейчас ?
Комментарии:
1. Я думаю, что $end_date и $start_date являются переменными php, поэтому он использует их для сравнения внутри оператора if.
2. да @damask @Sandeep вы, ребята, правы, я изменил
$rate_query
использование одинарной кавычки, и я получу значение, я отредактирую вопрос, чтобы показать правильный запрос
Ответ №2:
Используйте телескоп Laravel, чтобы просмотреть выходные данные запроса и сравнить их с вашим необработанным запросом.