我有一个名为Post
的父表,它有一个名为is_anonymous
的布尔列。 Post
表与Users
表有关系。我想仅在is_anonymous
设置为false
时加载此关系。有没有办法实现这个目标?
以下关系为用户提供了所有帖子。
$institute = Institute::where('inst_id', '=', $institute_id)->with(
['posts' => function ($posts) {
$posts->with(['user', 'tags']);
}]
)->orderBy('created_at', 'DESC')->skip($skip)->take(10)->get();
答案 0 :(得分:0)
我最终使用延迟加载来解决这个问题。我认为没有其他方法可以做到这一点。如果您找到更好的方法,请添加答案。
$posts = Institute::where('inst_id', '=', $institute_id)->first()->posts()->with('tags')
->orderBy('created_at', 'DESC')->skip($skip)->take(10)->get();
foreach ($posts as $post) {
if (!$post['is_anonymous']) {
$post->load('user');
}
}
或者,
为了提高性能,我目前正在使用以下查询解决此问题并删除关键用户,因为迭代10个项目的列表并且删除总是比进行10次查询(最坏情况)
$posts = Institute::where('inst_id', '=', $institute_id)->first()->posts()->with(['user', 'tags'])
->orderBy('created_at', 'DESC')->skip($skip)->take(10)->get();
foreach ($posts as $post) {
if ($post['is_anonymous']) {
unset($post['user'])
}
}