метод даты в красноречивом построителе запросов - PullRequest
0 голосов
/ 28 января 2019

У меня есть этот необработанный запрос, и я хочу использовать его в построителе eloquent запросов, но, похоже, я не могу использовать метод date в eloquent и выдает мне эту ошибку, я новичок в eloquent.в чем проблема:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date(prizes.created_at), user_id' in 'group statement' (SQL: select user_id,COUNT(user_id), date(created_at) from `prizes` group by `date(prizes`.`created_at), user_id` having `user_id` = 1 order by `date(created_at)` desc)

raw SQL:

SELECT
user_id,COUNT(user_id), DATE(created_at) FROM prizes
GROUP BY DATE(prizes.created_at), user_id
HAVING user_id = 1
ORDER BY DATE(created_at) DESC
limit 2

Eloquent:

$points = \App\Prize::selectRaw('user_id,COUNT(user_id), date(created_at)')
    ->groupBy("date(prizes.created_at), user_id")
    ->orderBy("date(created_at)","DESC")
    ->having("user_id","=",1)
    ->get();

Какая самая чистая и лучшая форма ??

1 Ответ

0 голосов
/ 28 января 2019

По умолчанию Laravel пытается проанализировать все строки как таблицы.Это означает, что он добавит строку между `.

. Чтобы избежать этого, вы можете поместить строку в функцию DB:raw(), чтобы Laravel знал, что не нужно анализировать эту строку и отправлять ее как-доступ к базе данных.

->orderBy(\DB::raw("date(created_at)"), "DESC")

Или использовать необработанный метод для заказа:

->orderByRaw('date(created_at) desc')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...