如果我不對,請糾正我。何時使用belongsTo以及何時hasMany?
有表products
和categories
。
每個產品都有自己的類別。所以,它可以是更多的一個。
所以,不,我需要選擇指定類別的所有產品。
我應該在模型中使用什麼樣的關係:belongsTo
或hasMany
? 它是重要的序列嗎?
如果我不對,請糾正我。何時使用belongsTo以及何時hasMany?
有表products
和categories
。
每個產品都有自己的類別。所以,它可以是更多的一個。
所以,不,我需要選擇指定類別的所有產品。
我應該在模型中使用什麼樣的關係:belongsTo
或hasMany
? 它是重要的序列嗎?
由於products
有多個categories
categories
和可以有多個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);
}
}
所以,我按類別獲得所有產品,可能是方法'products()'應該在'Product model'中? – Dev
在'Product'模型中,我會有一個類似的'categories()'方法。這是因爲,如果你有'$ category'對象,你會希望能夠從中獲得產品。在這種情況下,您可以說'$ category-> products()',它將從該多對多關係中獲取所有產品。如果你在'產品'模型上做了相反的處理,那麼你可以通過$ product-> categories()來獲得產品的類別。 – Sam
好的,那該怎麼調用?就像:'Product :: all() - > products();' – Dev
對不起,我的困惑...但是,產品可以有多個類別(或只有一個)? – Sam
產品有多個類別 – Dev