邮政.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
. 不是很确定,不过需要测试一下。欢迎在评论中对此作出任何反馈。
暂无答案!
目前还没有任何答案,快来回答吧!