#laravel #eloquent #laravel-query-builder #laravel-relations
Вопрос:
Я пытаюсь использовать laravel eloquent для обработки запроса, но он не распознает связь
$query = $site
->consumers()
->with([
'transactions' => function($_query) use ($thresh) {
$_query
->where('status', 'processed')
->where('approved', 1)
->selectRaw("SUM({$thresh} - value bonus_value) AS total_points");
}
])
->where('total_points', '<=', 5000);
dd($query->get()->toArray());
У меня есть этот код. Когда я добавляю selectRaw
transactions
связь, она ничего не возвращает, но когда я ее удаляю, она возвращает все транзакции, связанные с потребителем. Кроме того, total_points
в where
пункте поднимается вопрос, который total_points
не найден.
Я в основном пытаюсь привлечь потребителей, у которых общее количество баллов меньше или равно 5000.
Комментарии:
1. Не вставляйте переменные непосредственно в запрос базы данных. Используйте заполнители, как описано в документации . Кроме того, обычно кто-то ставит
select()
илиselectRaw()
методы на первое место в цепочке, хотя я не думаю, что это имеет какое-либо значение. Проверьте журналы запросов к базе данных, чтобы узнать, какой SQL отправляется.2. Кроме того, если вы выбираете столбцы вручную, всегда полезно включить основной и внешний ключи
transactions
таблицы.3. @miken32 да, в этом случае нет разницы в порядке, но мне любопытно , почему вы используете
$_query
, что так странно, вы всегда продолжаете использовать$query
. Следуйте за PSR Али.4. Вы определяете функцию. Вы можете называть этот параметр как угодно