【问题标题】:eloquent ORM (laravel): select from two tables associated with pivot table雄辩的ORM(laravel):从与数据透视表关联的两个表中选择
【发布时间】:2016-06-11 10:27:08
【问题描述】:

我的数据库中有树表(帖子标签 Post_tag(数据透视表)):

  1. 帖子(ID、内容、标题、...)
  2. 标签(id,tag_name)
  3. post_tag(id,post_id,tag_id)

现在我的问题是如何选择具有相同标签的所有帖子到帖子中,例如:选择所有与帖子 1 具有相似标签的帖子。 我已经创建了帖子和标签表之间的关系: 在帖子表中:

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

在标签表中:

    public function posts(){
    return $this->belongsToMany('App\Post');}

我尝试了什么:

    public function similar_tags($id)
    {
        $post = \App\Post::find($id);
        $all_posts = \App\Post::where('id','<>',$id)->where('catg_id','=',$post->catg_id);
        $result=array();
        if(count($post->tags)){
            foreach ($post->tags as $tag) {
                $all_posts = \App\Post::with('tags')->where('id','=',$id)->get();
                foreach ($all_posts as $post) {
                    $result[]=$post->post_id;
                }
            }
            return view('home',compact('result'));
;
        }else{
            $fa=0;
            return view('home',compact('fa'));
        }
    }

【问题讨论】:

  • 你的意思是“获取带有多个标签的帖子”吗?
  • @Drudge 获取具有相同标签的帖子不需要所有标签你得到了吗?
  • 是的,但是您可以发布您尝试过的代码吗??

标签: php laravel orm laravel-5 eloquent


【解决方案1】:

类似这样的:

  $posts = Post::whereHas('tags', function($q) use ($tags)
{
    $q->whereIn('id', $tags);//get $tags first .
})->get();

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多