0

我正在尝试使用中间表连接表,例如:我有portfolios table并且packages table表的每一行将有许多存储在中的 imgs imgs table,我想尝试制作一个中间表来连接它们,所以imgs table只有 2 个列,这是详细信息:

投资组合表

portfolio_id
portfolio_name
description

包装表

package_id
package_name
price

图像表

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()

然后它将返回在特定投资组合 ID 上引用的所有 intermediary_table 数据

但我需要做另一个查询来选择imgs适合imgs tableintermediary_id

总是这样做是一个好习惯吗?如何使这更好?

笔记

我正在使用intermediary table,所以当我需要创建另一个需要 img 的表时,我可以在中间表中添加 collumntable_id

ps:抱歉英语不好

4

1 回答 1

1

每次我需要不同的关系时,我真的会创建一个不同的表。它很干净。在这里,我首先将packages/imgs 和portions/imgs 之间的关系分成两个不同的数据透视表:imgs_packages 和imgs_portfolios。

您需要确保将 imgs 及其单数形式 (img) 添加到 strings.php,因为它们不是英语中的单词。您还需要确保已在 Schema 构建器中正确定义了您的关系。(见:http ://three.laravel.com/docs/database/schema )另外,这将是有帮助的:http ://codehappy.daylerees.com/eloquent-orm

我假设您使用的是 Laravel 3。我还假设您正确设置了迁移和模型。(如果我的回答不满意,可能是因为问题没有包含尽可能多的信息)

于 2013-06-03T17:14:48.517 回答