Laravel - Eloquent加入中间表的表

时间:2013-06-02 13:26:09

标签: php laravel fluent eloquent

我尝试使用中间表连接表,例如: 我有portfolios tablepackages 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

的collumn

ps:抱歉英文不好

1 个答案:

答案 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.我还假设您正确设置了迁移和模型。 (如果我的答案不能令人满意,那可能是因为问题没有包含必要的信息)