Php 雄辩的ORM(laravel):从与透视表关联的两个表中进行选择

Php 雄辩的ORM(laravel):从与透视表关联的两个表中进行选择,php,laravel,orm,laravel-5,eloquent,Php,Laravel,Orm,Laravel 5,Eloquent,我的数据库中有树表(Posts标记Post_标记(透视表)): 帖子(id、内容、标题等) 标签(id、标签名称) post_标签(id、post_id、tag_id) 现在我的问题是如何选择一篇文章中所有标签相同的文章,例如:选择所有标签与文章1相似的文章。 我已经创建了POST和tags表之间的关系: 在员额表中: public function tags(){ return $this->belongsToMany('App\Tag');} 在标签表中: p

我的数据库中有树表(Posts标记Post_标记(透视表)):

  • 帖子(id、内容、标题等)
  • 标签(id、标签名称)
  • post_标签(id、post_id、tag_id)
  • 现在我的问题是如何选择一篇文章中所有标签相同的文章,例如:选择所有标签与文章1相似的文章。 我已经创建了POST和tags表之间的关系: 在员额表中:

        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'));
            }
        }
    
    public函数类似\u标记($id)
    {
    $post=\App\post::find($id);
    $all_posts=\App\Post::where('id',''$id)->where('catg_id','=',$Post->catg_id);
    $result=array();
    如果(计数($post->tags)){
    foreach($post->tags as$tag){
    $all_posts=\App\Post::with('tags')->where('id','=',$id)->get();
    foreach($post作为$post){
    $result[]=$post->post\u id;
    }
    }
    返回视图(“主视图”,压缩视图(“结果”);
    ;
    }否则{
    $fa=0;
    返回视图(“主视图”,紧凑型(“fa”);
    }
    }
    
    类似这样的内容:

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

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

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