让我们说这是我的桌面结构:
posts
id - integer
title - string
body - text
reviewed - boolean
videos
id - integer
title - string
url - string
profileContent
id - integer
user_id - integer
content_id - integer
content_type - string
现在我想收到用户个人资料的内容:
$user->profileContents()
->latest()
->with(['content' => function ($query){
//I'm not sure how to do it
}])
->paginate(5);
我怎么说如果列#34;已审核"存在应该是真的吗?但视频是否经过审核并不重要。
其他信息:
profileContents()为我提供了用户个人资料的所有内容
public function profileContents()
{
return $this->hasManyThrough(ProfileContent::class, Profile::class);
}
和('内容')用于转换为特定模型:
public function content()
{
return $this->morphTo();
}
修改1:
我离我的目标更近了。我使用GlobalScope只显示经过审核的内容。
在帖子中:
protected static function boot()
{
parent::boot();
static::addGlobalScope('reviewed', function (Builder $builder) {
$builder->where('reviewed', true);
});
}
但是现在我遇到的问题是我仍然无法排除空查询。我告诉你输出:
//ProfileContent
array:2 [
0 => array:8 [
"id" => 1
"profile_id" => "1"
"content_id" => "1"
"content_type" => "App\Video"
"content" => "[some array values]"
]
1 => array:8 [
"id" => 2
"profile_id" => "1"
"content_id" => "1"
"content_type" => "App\Post"
"content" => null
]
]
如何在不丢失分页数据的情况下排除空数组(输出应为5)
答案 0 :(得分:0)
再次检查您的问题,您正在访问关系,然后尝试再次加载关系。我很确定这就是你想要的:
$user->contents()
->latest()
->with(['posts' => function ($query){
//here you add a query constrain on eagerload like:
$query->where('reviewed', true);
}])
->paginate(5);