使用 Laravel 从选择的标签中获取所有项目
Getting all item from choosen tag with Laravel
我有一个页面显示图像 + 添加到图像的标签。我想让标签可点击,当我点击某个标签打开所有也有这个标签的图像时。
我有 3 个表:images
用于图像,tags
用于标签,image_tag
用于分配给带有列的图像的标签(image_id
和 tag_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();
我有一个页面显示图像 + 添加到图像的标签。我想让标签可点击,当我点击某个标签打开所有也有这个标签的图像时。
我有 3 个表:images
用于图像,tags
用于标签,image_tag
用于分配给带有列的图像的标签(image_id
和 tag_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();