Каждая компания в моем приложении может хранить свои события.
Компания и ее события связаны следующими hasMany отношениями:
/**
* The events that belong to the company.
*/
public function events()
{
return $this->hasMany('App\Event');
}
Чтобы перечислить события компании, я использую:
Auth::user()->company->events
Поскольку каждое событие хранит много данных, которые мне не нужны при запросе hasMany, я хотел бы настроить отношение так, чтобы выбирать только столбцы id и name, а не всю строку.
Мой запрос на отношения hasMany будет выглядеть примерно так:
DB::table('events')->where('company_id', Auth::id())->select('id', 'name')->get();
Как взять коллекцию, возвращенную из этого результата, и использовать ее в качестве запроса для моего отношения hasMany, которое затем правильно вернет коллекцию экземпляров событий?
@ZakariaAcharki Я отредактировал свой вопрос, включив в него код метода events.






Добавьте фильтр в свой метод events, например:
public function events()
{
return $this->hasMany('App\Event')->select('id', 'company_id', 'name');
}
Затем назовите это так:
Auth::user()->company->events
Важное обновление: 'company_id' необходим для ссылки компания->события, иначе связь 'events' всегда возвращает пустой массив
Как насчет
Auth::user()->company()->with('events:id,name')->get();
https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
Перейти к страстной загрузке определенных столбцов
Покажите нам свой код метода
eventsиз модели компании, пожалуйста, я бы предложил добавить часть->select('id', 'name')внутри метода отношений.