Параметр привязки к запросу Db :: raw laravel

У меня есть следующий необработанный запрос:

$results = Db::select( Db::raw("SELECT HOUR(created_at) as hour, COUNT(*) as count
FROM `visited`
WHERE created_at >= DATE_SUB(NOW(),INTERVAL 16 DAY)
GROUP BY HOUR(created_at)") );

Мне нужно параметризовать дневной интервал, поэтому я попробовал это:

$days = 16;
$results = Db::select( Db::raw("SELECT HOUR(created_at) as hour, COUNT(*) as count
FROM `visited`
WHERE created_at >= DATE_SUB(NOW(),INTERVAL :days DAY)
GROUP BY HOUR(created_at)", ["days" => $days]) );

Но я получаю следующую ошибку:

«SQLSTATE [HY000]: общая ошибка: 2031

Видимо привязка не работает. Что я делаю неправильно?

3

Решение

Попробуй это:

$results = DB::select('SELECT HOUR(created_at) as hour, COUNT(*) as count FROM visited WHERE created_at >= DATE_SUB(NOW(),INTERVAL ? DAY) GROUP BY HOUR(created_at)', [16]);

Вы даже можете использовать именованные привязки:

$results = DB::select('SELECT HOUR(created_at) as hour, COUNT(*) as count FROM visited WHERE created_at >= DATE_SUB(NOW(),INTERVAL :days DAY) GROUP BY HOUR(created_at)', ['days' => 16]);

Не нужно использовать DB::raw()Просто используйте DB::select() для простых необработанных запросов на выборку: https://laravel.com/docs/master/database#running-queries

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]