#php #laravel
#php #laravel
Вопрос:
Я пытаюсь повторить следующий SQL-запрос в контроллер laravel, но безуспешно. Запрос отлично работает как прямой запрос mysql, поэтому есть проблема с данными, но сложность ставит меня в тупик с помощью laravel query builder. Я пытался использовать функцию ‘Raw()’ и переменную в контроллере, но это все еще не возвращает данные из запроса. Любая помощь приветствуется.
SELECT *
FROM (SELECT * from figures
) t2
left join
( SELECT
figure_id,
SUM(IF(trade='1', trade, 0)) as trades,
SUM(IF(sale='1', sale, 0)) as sales
FROM userfigures
GROUP BY figure_id ) t1
ON (t1.figure_id = t2.id)
исходная команда
$sql = "SELECT * FROM (SELECT * from figures) t2 left join ( SELECT figure_id, SUM(IF(trade='1', trade, 0)) as trades, SUM(IF(sale='1', sale, 0)) as sales FROM userfigures GROUP BY figure_id ) t1 ON (t1.figure_id = t2.id)";
$sellers = userfigures::Raw($sql)->get();
Ответ №1:
попробуйте:
DB::table('figures as t1')
->leftJoin(DB::table('userfigures as t2')
->select('figure_id',
DB::raw("SUM(IF(trade = '1', trade, 0)) AS trades"),
DB::raw("SUM(IF(sale = '1', sale, 0)) AS sales")
)
->groupBy('figure_id'), 't1.figure_id', 't2.id')
->get();
Комментарии:
1. Спасибо за предложение, попробовал код, и я получаю следующую ошибку, от которой я не могу избавиться после небольшой переделки. «Не удалось преобразовать объект класса Illuminate Database Query Builder в строку» У вас есть какие-либо предложения?
2. Я нашел решение, но хотел бы изучить решение выше, поскольку это современный способ выполнить запрос alirezadp10.
Ответ №2:
Используйте DB::select
вместо userfigures::Raw
https://laravel.com/docs/7.x/database#running-queries
Комментарии:
1. Я работаю с помощью этого метода, поскольку хочу изучить оба метода, изначально с приведенным выше кодом я получаю сообщение об ошибке: «Столбец не найден: 1054 неизвестных столбца». Я обновил код до « $ sellers = DB::select ($ sql)-> get(); « Я получаю ошибку intellisense: ожидаемый тип ‘object’. Найден ‘массив’. в VSCode и «Вызов функции-члена get() для массива» в браузере. Я пробовал «$ sellers2 = (array) $ sellers;» под строкой выше, но получаю вывод запроса в представление. (Я чувствую себя виноватым, задавая здесь вопросы, и не хочу выглядеть так, будто я просто хочу получить ответ!)
2. У меня это работает, по какой-то причине первое слово «ВЫБРАТЬ», написанное заглавными буквами, вызывало ошибку, изменил его на нижний регистр, это сработало! а затем изменил его на верхний регистр. Очень случайно (подозреваю, что это был я в некотором роде) Ваш код — это решение. Большое спасибо.
3. Это код, который работает для этого типа запросов:
code $sellers1 = userfigures::select( 'figures.*', 'userfigures.figure_id', DB::raw('SUM(IF(trade="1", trade, 0)) as trades'), DB::raw('SUM(IF(sale="1", sale, 0)) as sales')) ->rightJoin('figures', 'figures.id', '=', 'userfigures.figure_id') // ->where('analytics.date', Carbon::today()->toDateString()) ->groupBy('figures.id', 'userfigures.figure_id') ->paginate(10);
Спасибо, что помогли мне добраться до правильного кода на основе вашей справки AndreiXwe