Обратный вызов с помощью() возвращает значение null в красноречивом запросе laravel

#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. Вы определяете функцию. Вы можете называть этот параметр как угодно