Пользовательский запрос отношения hasMany с помощью select()

Каждая компания в моем приложении может хранить свои события.

Компания и ее события связаны следующими 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, которое затем правильно вернет коллекцию экземпляров событий?

Покажите нам свой код метода events из модели компании, пожалуйста, я бы предложил добавить часть ->select('id', 'name') внутри метода отношений.

Zakaria Acharki 18.04.2019 13:43

@ZakariaAcharki Я отредактировал свой вопрос, включив в него код метода events.

Dan Harrin 18.04.2019 13:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
2
951
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Добавьте фильтр в свой метод 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

Перейти к страстной загрузке определенных столбцов

Другие вопросы по теме