多对多在哪里

时间:2019-04-19 18:13:39

标签: laravel laravel-5.8

我要搜索仅具有标签ID号的具有类似标签的帖子

我已经尝试过了

$tags = Tag::find($id);
$post = Post::whereHas('tags', function($q) use ($id){
$q->where('id',$id);})->paginate(5);

    return view('tagdetail', compact('tags', 'post'));

但输出为SQLSTATE [23000]:违反完整性约束:1052 where子句中的ID列不明确(23000)。

我已经在互联网上搜索了,仍然不能。

Tag.php

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

Post.php

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

控制器

public function detailTag($id)
    {
        //i know this will get all the post with the tag id, but i want to paginate it too. 
        $tags = Tag::find($id);

        $post = Post::whereHas('tags', function($q) use ($id){
    $q->where('id',$id);
})->paginate(5);

        return view('tagdetail', compact('tags', 'post'));
    }

预期结果:显示所有具有相似标签且分页的帖子。

实际结果:SQLSTATE [23000]:违反完整性约束:1052 where子句不明确的列(id)(23000)

1 个答案:

答案 0 :(得分:0)

我本人多次遇到这个问题。只是要您弄清楚要在哪个表中比较poststags中的ID,因为两个表具有相同的键(id)。试试这个,我认为它将解决您的问题:

$post = Post::whereHas('tags', function($q) use ($id){
    $q->where('tags.id',$id); // ** call out the tags table specifically
})->paginate(5);