我有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
帖子类型仅需要对列:
但是,当我使用vacancy
关系对象请求company
帖子类型时,则返回company
帖子类型,其中包含所有列,而不是仅包含所需的列。
如何解决我的问题?
答案 0 :(得分:0)
您可以为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