我尝试使用中间表连接表,例如:
我有portfolios table
和packages table
表格的每一行都会有很多img存储在imgs table
中,我想尝试制作一个中间表来加入它们,以便imgs table
将只有2个列,这里是详细信息:
投资组合表
portfolio_id
portfolio_name
description
打包表
package_id
package_name
price
imgs table
img_id
img_name
intermediary_imgs表
img_id
intermediary_id
portfolio_id
package_id
如果img仅用于投资组合,那么在intermediary_imgs table
中,package_id
列将具有值0
我使用Fluent Query Builder实现了这个目标:
DB::table('portfolios')
->select('portfolios.portfolio_id', 'portfolios.portfolio_name', 'imgs.img_id', 'imgs.img_name','imgs.intermediary_id')
->join('intermediary_imgs', 'portfolios.portfolio_id', '=', 'imgs_pivot.portfolio_id')
->join('imgs', 'intermediary_imgs.intermediary_id', '=', 'imgs.intermediary_id')
->where('portfolios.portfolio_id', '=', $id)
->get();
然后我尝试在Eloquent中做它并且它不起作用,我尝试过:
//i already specify the relationship in the each model(Portfolio, Packages, Intermediary, Img)
Portfolios::with('imgsIntermediary')->get()
然后它将返回引用特定portfolio_id
的所有intermediate_table数据但是我需要执行另一个查询,从imgs
中选择imgs table
intermediary_id
始终这样做是一种好习惯吗?如何让这更好?
注意
我正在使用intermediary table
所以当我需要创建另一个需要img的表时,我可以在中间表中添加带有table_id
ps:抱歉英文不好
答案 0 :(得分:1)
每次我需要不同的关系时,我真的会创建一个不同的表。它很干净。在这里,我首先将packages / imgs和portfolio / imgs之间的关系分成两个不同的数据透视表:imgs_packages和imgs_portfolios。
您需要确保将imgs及其单数形式(img)添加到strings.php中,因为它们不是英语单词。 您还需要确保在“架构”构建器中正确定义了关系。 (见:http://three.laravel.com/docs/database/schema) 此外,这将有所帮助:http://codehappy.daylerees.com/eloquent-orm
我假设您使用的是Laravel 3.我还假设您正确设置了迁移和模型。 (如果我的答案不能令人满意,那可能是因为问题没有包含必要的信息)