Laravel仅从关系对象中获取所需的列

时间:2019-06-01 05:53:35

标签: laravel eloquent relationship laravel-5.8 laravel-collection

我有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 :(得分:0)

您可以为CompanyVacancy定义模型

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