Laravel Eloquent图片/页面关系设置

时间:2018-02-08 16:09:38

标签: php laravel laravel-5 laravel-5.4

我正在搬到Laravel,并认为最好的学习方法是在Laravel重建我自己的CMS,但我正在努力解决以下问题:

我正在使用Laravel 5.4

我有五个表(设置了相应的模型):

images (id, type_id, item_id)
images_types (id)
images_types_templates (type_id, template_id)
pages (id, template_id)
templates (id)

我正在尝试建立一个雄辩的关系,以便我可以在Tinker中运行它:

Page::with(['images'])->first()

并查看此页面的相关图像(item_id)AND template_id

到目前为止,我只能在我的模型中检索项目:

public function images()
    {
        return $this->hasMany('App\Image', 'item_id');
    }

这确实有效,但它只检索与images.item_id

匹配的pages.id

我需要检查 images.type_id 是否与当前页面匹配。这是从页面表( pages.template_id )设置的,需要检查 images_types_templates.template_id 以查看是否允许此类图像在这个页面上)

我希望我可以运行Page :: with(['images'])并且只能看到与此页面和template_id相关的图像。 图片表中的 item_id 字段可能与网站的任何其他部分相关,而不仅仅是与 item_id 相关的网页,而不是 PAGE_ID

希望有意义

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了。

所以在我的Page.php模型中我有:

/ 1GB

然后在我的Template.php模型上:

public function template()
{
    return $this->hasOne('App\Template', 'id', 'template_id');
}

然后我可以在修补程序中运行它:

public function type(){
    return $this->belongsToMany(ImageType::class,'images_types_templates','template_id', 'type_id');
}

然后它返回:

Page::with(['template', 'template.type'])->get()

:)