0

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

  • 客户
  • 资产
  • 产品

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

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

  • client_asset [id|client_id|asset_id]
  • 资产产品 [id|资产 ID|产品 ID]

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

  • client_asset_asset_products [id|client_asset_id|asset_products_id]

但这在 Eloquent 中是否允许?可能吗?这是好的做法吗?

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

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

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

4

1 回答 1

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.*' );

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

于 2013-05-20T22:28:22.077 回答