我有3张桌子:
Table: images
Columns: Image_ID, Title, Description, Author, Date, Path, Rating
Table: tags
Columns: Tag_ID, Title
Table: tag_image
Columns: Image_ID, Tag_ID
如果我想获得所有图像,我会这样做:
public function specificTag($tagName){
$images = Image::orderBy('created_at', 'desc')->get();
return view('specificTag', ['images' => $images]);
}
然后在我的specificTag视图中循环遍历$ images。但是,现在我只想显示具有$ tagName标记的图像。 $ tagName是一个字符串。任何提示将不胜感激。
答案 0 :(得分:4)
您可以使用whereHas
方法。
Image::whereHas('tags', function($q) use ($tagName) {
return $q->where('title', $tagName);
})->orderBy('created_at', 'desc')->get();
答案 1 :(得分:0)
为什么不利用Eloquent的多对多关系。 在“图像”模型中创建以下功能。
public function tags(){
return $this->belongsToMany('App\Tags');
}
现在在您的控制器中,您可以像这样访问它
$image = App\Image::find(1);
foreach($image->tags as $tag){
$tag->where('title',$title);
}
您可以查看Eloquent的关系https://laravel.com/docs/5.5/eloquent-relationships#many-to-many