laravel5.6-eager根据父表中的值加载

i2byvkas  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(255)

邮政.php

$fillable = ['id','flag'];

public function tags() 
{
  return $this->belongsToMany('App\Tags')->withPivot('pivot_flag');
}

public function flaggedTags()
{
  return $this->tags()->where('pivot_flag', 1)->get();
}

标签.php

$fillable = ['id']
public function posts() 
{
  return $this->belongsToMany('App\Post');
}

数据透视表 post_tag 柱: post_id , tag_id , pivot_flag 我需要取带标签的邮件:

$post = Post::select('id','flag')->with('tags')->find($postId);

但是,如果 flag 设置为 1 在后,那么我只想要标签有 pivot_flag 数据透视表中的值 post_tag 设置为 1 所以在这种情况下,我会有以下几点:

$post = Post::select('id','flag')->with('flaggedTags')->find($postId);

如何在单个查询中执行此操作?我总是可以做一个查询来检查 Post 然后运行相应的查询 Tags ,但这似乎是浪费。
有说服力的或原始的mysql查询是受欢迎的。
谢谢!
更新-替代解决方案
加载所有标签,然后根据帖子过滤结果 flag 价值:

if($post->flag)
{
  $tags = $post->tags->filter(funtction($q) {
     return $q->pivot->pivot_flag == 1;
  });
}
else 
{
  $tags = $post->tags;
}

这可能会更快取决于 tags . 不是很确定,不过需要测试一下。欢迎在评论中对此作出任何反馈。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题