@xnkka

Как указать поля для выборки в жадной загрузке eloquent?

Данный запрос прекрасно работает, но выдает все поля с обеих таблиц,
$cities = City::with(['city_translates'=>function($query) use ($lang_id){
            $query->where('language_id',$lang_id);
        }])
        ->get()
        ->toJson();

если указать так, то с таблицы city_translates ничего не приходит
$cities = City::with(['city_translates'=>function($query) use ($lang_id){
            $query
                ->select('name')
                ->where('language_id',$lang_id);
        }])
        ->get()
        ->toJson();

В данном случае выдает поля только таблицы City.
$cities = City::with(['city_translates' => function ($query) use ($lang_id) {
            $query
                ->where('language_id', $lang_id);
        }])
            ->select('name')
            ->get()
            ->toJson();

Как указать поля для выборки и как вообще правильно формировать данные при жадной загрузке если laravel используется в качестве api и должен возвращать json?
  • Вопрос задан
  • 472 просмотра
Решения вопроса 1
@NubasLol
$query
                ->select('name')
                ->where('language_id',$lang_id);


Конечно же так не будет работать. Ибо как по вашему Лара должна будет догадаться, как связаны city_translates и City, если вы выкинули связывающий ключ из селекта?

Если вы хотите скрыть данные в json, то есть атрибут hidden для этого. Но!! Это изначально плохой путь, и раковый код.

Специально для вас разработчики сделали специальный инструмент.

https://laravel.com/docs/6.x/eloquent-resources
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
metallix
@metallix
Backend - developer
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы