使用“多对多多态关系”时,我可以检索共享标签的所有图像和相册吗?

时间:2018-07-13 21:31:39

标签: php laravel eloquent

当前,我正在使用它来显示所有带有$ tagName标签的图像:

$images = Image::whereHas('tags', function($q) use ($tagName) {
            return $q->where('name', $tagName);
        })->orderBy('created_at', 'desc')->get();

现在考虑我正在使用多对多态关系,并且我有这些表:

images
    id - integer
    name - string

albums
    id - integer
    name - string

tags
    id - integer
    name - string

taggables
    tag_id - integer
    taggable_id - integer
    taggable_type - string

我可以创建一个查询来检索带有$ tagName标签的图像和相册吗?

1 个答案:

答案 0 :(得分:2)

可以。

存储在标签中的是:

id = it's own primary key
tag_id = your custom foreign_key for tag id I'm guessing
taggable_type = model name     e.g.                       "App\Image"       
taggable_id = the model's id   e.g.                       "1"

在这些行中,您可以根据需要和已建立的关系从任何模型调用。它的工作原理与其他任何关系一样,您需要知道的是,它会根据taggables_typetaggables_id找到相关模型并将其计算出来

Taggables::whereHas('tags', function ($advancedWhereHas) use ($tagName){ 
       $advancedWhereHas->where('name',$tagName)->with(['relationshipToImages.relationshipOfAlbum']);
})->get();