从多对多关系中获取过滤数据

时间:2020-06-15 10:50:40

标签: laravel eloquent many-to-many

我需要从Post和Tag表中获得多对多关系的过滤数据。

我有Post Model:

class Post extends Model
{
    public function tag()
    {
        return $this->belongsToMany('App\Tag', 'post_tag','post_id','tag_id');
    }   
}

标记模型如下:

Class Tag extends Model
{
    protected $fillable = ['name'];

    public function post()
    {
        return $this->belongsToMany(Post::class, 'post_tag');
    }  
}

但是当我尝试获取基于tag_id的过滤数据时:

if($request->filled('tag_id')){
           $posts = Post::whereHas(
               ['tag' => function($query) use($request)
                   {
                       $query->where('tag_id','=', $request->input('tag_id'));
                   }
               ])->get();
       }

它不起作用

1 个答案:

答案 0 :(得分:1)

根据laravel doc

其中将字符串和回调函数作为参数而不是数组:

 $posts = Post::whereHas(
               'tag' ,function($query) use($request)
                   {
                       $query->where('tag_id','=', $request->input('tag_id'));
                   }
               )->get();