#laravel #eloquent
#ларавель #красноречивый
Вопрос:
Каждая компания в моем приложении может хранить свои собственные события.
Компания и ее события связаны следующими hasMany
отношениями:
/**
* The events that belong to the company.
*/
public function events()
{
return $this->hasMany('AppEvent');
}
Чтобы перечислить события компании, я использую:
Auth::user()->company->events
Поскольку каждое событие хранит много данных, которые мне не нужны при запросе hasMany
, я хотел бы настроить связь так, чтобы выбирать только id
name
столбцы и, а не всю строку целиком.
Мой hasMany
запрос на отношения будет выглядеть примерно так
DB::table('events')->where('company_id', Auth::id())->select('id', 'name')->get();
Как мне взять коллекцию, возвращенную из этого результата, и использовать ее в качестве запроса для моего hasMany
отношения, которое затем правильно вернет коллекцию экземпляров событий?
Комментарии:
1. Пожалуйста, покажите нам код вашего
events
метода из модели компании, я бы предложил добавить->select('id', 'name')
часть внутри метода отношений.2. @ZakariaAcharki Я отредактировал свой вопрос, чтобы включить код
events
метода.
Ответ №1:
Добавьте фильтр внутри вашего events
метода, например :
public function events()
{
return $this->hasMany('AppEvent')->select('id', 'company_id', 'name');
}
Затем вызовите его следующим образом:
Auth::user()->company->events
Важное обновление: ‘company_id’ необходим для ссылки company-> events, в противном случае отношение ‘events’ всегда возвращает пустой массив
Ответ №2:
Как насчет
Auth::user()->company()->with('events:id,name')->get();
https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
Перейдите к загрузке определенных столбцов