我正在搬到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
希望有意义
答案 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()
:)