使用 Laravel 从选择的标签中获取所有项目

Getting all item from choosen tag with Laravel

我有一个页面显示图像 + 添加到图像的标签。我想让标签可点击,当我点击某个标签打开所有也有这个标签的图像时。

我有 3 个表:images 用于图像,tags 用于标签,image_tag 用于分配给带有列的图像的标签(image_idtag_id ).我的模特是

在 Tag 模型中我添加了这个关系

public function byTags() {    
    return $this->belongsToMany('App\Image', 'item_tag');  
}

我也将它添加到我的图像模型中,但我不确定是否需要它

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

这是应该加载所有图像的 href link

<a href="{!! url('byTag/' . $tag->id) !!}"> {!! $tag->tag !!} </a>

这是我的路线

Route::get('byTag/{tag_id}', 'ImageController@byTag')->name('bytag');

byTag()函数在ImageController

public function byTag($tag_id){

    $images = Tag::with('byTags')->whereId($tag_id)->get();
    return view('bytag', compact('images'));          
}

当我点击按钮时发生的事情是,我在视图 bytag 上获得了标签,而不是带有该标签的图像。

我在这里想念什么?

您应该使用 Image 模型和 whereHas() 方法加载图像:

$images = Image::whereHas('tags', function ($q) use($tag_id) {
        $q->where('id', $tag_id);
    })->get();