Laravel 4根据与其他2个模型的关系发现集合

时间:2014-04-16 00:54:35

标签: laravel-4 eloquent

我有这样的模特:

  1. 有一个产品类型的表(product_types)。
  2. 拥有与产品类型表具有多对一关系的产品表(产品)。
  3. 有一个属性类型的表(attribute_types)。
  4. 有产品类型和属性类型之间的(多对多)关系表
  5. 有一个包含属性类型,属性值的表(属性)。
  6. 有一个产品和属性之间的(多对多)关系表。
  7. 我需要对这个系列做一些主要的事情

    $product_type = ProductType::find(1);
    

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

    return $product_type->products;
    

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

    return $product_type->attribute_types;
    

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

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

1 个答案:

答案 0 :(得分:0)

在文档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);
}