2016-07-20 89 views
0

如果我不对,请纠正我。何时使用belongsTo以及何时hasMany?

有表productscategories

每个产品都有自己的类别。所以,它可以是更多的一个。

所以,不,我需要选择指定类别的所有产品。

我应该在模型中使用什么样的关系:belongsTohasMany? 它是重要的序列吗?

+0

对不起,我的困惑...但是,产品可以有多个类别(或只有一个)? – Sam

+0

产品有多个类别 – Dev

回答

2

由于products有多个categoriescategories和可以有多个products,这被称为一个many-to-many SQL relationship

如果我们转到Laravel Eloquent documentation,您会看到您要使用belongsToMany()。这意味着,如果你希望能够从category检索所有products,你会做这样的事情(从Laravel的文档无耻地复制):

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 
    /** 
    * The products that belong to the category. 
    */ 
    public function products() 
    { 
     return $this->belongsToMany('App\Product'); 
    } 
} 

,当然这许多的另一面一对多的关系非常相似:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Product extends Model 
{ 
    /** 
    * The categories that belong to the product. 
    */ 
    public function categories() 
    { 
     return $this->belongsToMany('App\Category'); 
    } 
} 

现在...如果你想获取的所有产品,并随后找到所有类别的每一个产品,你会做这样的事情:

$products = Product::all(); 
foreach($products as $product) { 
    // var_dump($product); 

    $categories = $product->categories(); 
    foreach($categories as $category) { 
     // var_dump($category); 
    } 
} 
+0

所以,我按类别获得所有产品,可能是方法'products()'应该在'Product model'中? – Dev

+0

在'Product'模型中,我会有一个类似的'categories()'方法。这是因为,如果你有'$ category'对象,你会希望能够从中获得产品。在这种情况下,您可以说'$ category-> products()',它将从该多对多关系中获取所有产品。如果你在'产品'模型上做了相反的处理,那么你可以通过$ product-> categories()来获得产品的类别。 – Sam

+0

好的,那该怎么调用?就像:'Product :: all() - > products();' – Dev

相关问题