如何使用Eloquent检索Laravel中具有特定标记的所有图像?

时间:2018-02-19 16:30:52

标签: php laravel eloquent

我有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是一个字符串。任何提示将不胜感激。

2 个答案:

答案 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