2016-07-20 175 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

相關問題