【问题标题】:Laravel many-to-many-to-many relationship with Eloquent?Laravel 与 Eloquent 的多对多关系?
【发布时间】:2013-05-15 07:25:15
【问题描述】:

我想在 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 个中间表与新的中间表连接起来?

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

感谢任何帮助/信息。

【问题讨论】:

    标签: database laravel laravel-4 eloquent


    【解决方案1】:

    没关系。由 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.*' );
    

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

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 2019-06-13
      • 2019-03-26
      • 1970-01-01
      • 2018-10-05
      • 2013-02-09
      • 2013-05-27
      • 2016-11-03
      相关资源
      最近更新 更多