Laravel получает только нужные столбцы из объекта отношений - PullRequest
0 голосов
/ 01 июня 2019

У меня есть 2 типа сообщений:

  • Компания
  • Вакансия

Здесь я получу только нужные столбцы после извлечения сообщения по типу:

$posts = $posts->map(function($post) use ($company, $vacancy) {
    switch ($post->type) {
        case $company:
            return $post->only([
                'id',
                'name',
                'slogan',
                'logo'
            ]);
            break;
        case $vacancy:
            return $post->only([
                'id',
                'title',
                'price',
                'schedule',
                'employment',
                'company'
            ]);
            break;
    }
});

Как видите, vacancy тип записи должен содержать столбец company, который является объектом отношения, а company тип записи нужен только столбцам:

  • 'ID'
  • 'имя'
  • 'Лозунг'
  • 'логотип'

Но когда я запрашиваю vacancy тип записи с company объектом отношения, тогда company тип записи возвращается со всеми столбцами вместо только необходимого столбца.

Как можно решить мою проблему?

1 Ответ

0 голосов
/ 01 июня 2019

Вы можете определить модели для Company и Vacancy

class Company extends Post {
    protected $table = 'posts';

    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(function ($query) {
            $query->where('type', 'company');
        });
    }
}

class Vacancy extends Post {
    protected $table = 'posts';

    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(function ($query) {
            $query->where('type', 'vacancy');
        });
    }
}

В проекте мне удалось это сделать с помощью сводной таблицы для хранения связей между двумя типами моделей (я использовал BelongsToMany, но я думаю, что вы также можете указать HasOne

...