Laravel与Eloquent的多对多关系?

时间:2013-05-20 17:05:49

标签: database laravel laravel-4 eloquent

我想在Eloquent中建立多对多的关系。 我有3张桌子

  • 客户端
  • 资产
  • 产品

每个客户都可以拥有许多资产。 每种资产都可以有很多产品。

目前,它们与2个中间表连接

  • client_asset [id | client_id | asset_id]
  • asset_products [id | asset_id | product_id]

我想我现在需要将这两个中间表与另一个中间表连接起来

  • client_asset_asset_products [id | client_asset_id | asset_products_id]

但这是否允许在Eloquent?可能吗?这是好习惯吗?

如何将2个中间表与新的中间表连接?

如果你把它想象成一个有很多公共汽车的客户,每辆公共汽车都可以有很多乘客...这就是我所追求的。

感谢您提供任何帮助/信息。

1 个答案:

答案 0 :(得分:0)

一切都很好。由ORM决定客户端拥有哪些产品,并且已经拥有数据库中的所有信息。通过正确命名的关系方法,您可以使用这样的急切加载......

$client = Client::with( array( 'assets', 'assets.products' ) )->where_id( 9000 )->first();

// $client->assets array of assets
// $client->assets[0]->products array of products

您还可以通过执行类似

的操作获得平面产品列表
$products = Product::join( 'asset_products', 'asset_product.products.id', '=', 'products.id' )
    ->join( 'client_asset', 'client_asset.assets_id', '=', 'asset_products.assets_id' )
    ->where( 'client_asset.client_id', '=', 9000 )
    ->get( 'products.*' );

如果这是我经常做的事情,我会将其作为方法添加到客户端模型中。