【问题标题】:Laravel 4 finding collection based on relationship with 2 other modelsLaravel 4 根据与其他 2 个模型的关系查找集合
【发布时间】:2014-04-16 17:24:57
【问题描述】:

我有这样的模型:

  1. 有一个产品类型表 (product_types)。
  2. 拥有与产品类型表具有多对一关系的产品表(产品)。
  3. 有一个属性类型表(attribute_types)。
  4. 有一个产品类型和属性类型之间的(多对多)关系表
  5. 有一个包含属性类型、属性值的表(属性)。
  6. 有一个产品和属性之间的(多对多)关系表。

我需要对这个集合做一些主要的事情

$product_type = ProductType::find(1);

查找某个产品类型的所有产品。

return $product_type->products;

查找产品类型的所有属性类型

return $product_type->attribute_types;

查找属性类型和产品类型的所有属性。我知道这里的问题是我需要属性成为产品类型和属性类型的子项。

但是,我不确定最好的方法。

【问题讨论】:

    标签: laravel-4 eloquent


    【解决方案1】:

    像文档http://laravel.com/docs/eloquent#relationships一样设置关系

    然后你可以像这样得到你想要的集合:

    //return $product_type->products;
    $product_type->load('products')->products; // returns Eloquent Collection of products
    // or shorter equivalent:
    $product_type->products;
    
    //return $product_type->attribute_types;
    the same as above since the relationships are identical (many-to-many)
    
    
    // Then to get Attributes:
    $product_type->load('products.attributes');
    //then you can get all attributes as a single array (every attr as an array not model):
    $attributesArray = $product_type->products->fetch('attributes')->collapse();
    
    // or without casting merge all Attributes in a loop:
    $attributesCollection = new \Illuminate\Database\Eloquent\Collection;
    foreach ($product_type->products as $product)
    {
      $attributesCollection = $attributesCollection->merge($product->attributes);
    }
    

    【讨论】:

    • 现在,只需要找出基于属性过滤集合的最佳方法。如果这是可以添加到答案中的内容,我认为这对许多人都会有用。
    • 我想过滤查询中的属性会更容易。您需要什么样的过滤器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2013-07-04
    • 2013-09-12
    • 2021-06-11
    • 2018-12-11
    • 2018-06-24
    • 2015-03-29
    相关资源
    最近更新 更多