如果我不对,请纠正我。何时使用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