我有一个包含产品的表格,一个包含类别的表格和一个将产品链接到多个类别的表格。所有正确的外键都将它们连接在一起。当用户属于某个类别时,使用ProductToCategory
模型选择此类别中的产品。
但我想要的是找到一种简单的方法,而不是将链接产品的输出循环到此类别,以按名称对产品进行排序。
我的数据库布局:
products
id: 1; name: testing 123
id: 2; name: testing 345
id: 3; name: testing 567
product_categories
id: 1; name: cat one
id: 2; name: cat two
id: 3; name: cat three
product_to_categories
id: 1; product_id: 1; product_category_id: 1
id: 2; product_id: 1; product_category_id: 2
id: 3; product_id: 2; product_category_id: 1
id: 4; product_id: 3; product_category_id: 1
id: 5; product_id: 3; product_category_id: 2
id: 6; product_id: 3; product_category_id: 3
在我的ProductCategory模型中,我有:
public function ProductToCategory() {
return $this->hasMany('App\Models\ProductToCategory');
}
在我的ProductToCategory模型中,我有:
public function Product() {
return $this->belongsTo('App\Models\Product', 'product_id');
}
在控制器中我有:
$linked_products = $category->ProductToCategory()->get();
foreach($linked_products as $linked_product) {
if($linked_product->Product->is_active == 1) {
$array[$linked_product->product_id] = $linked_product->Product);
}
}
这为我提供了$linked_product->Product
我需要的产品信息。
但是在模型中使用Eloquent方法我想在给出查询结果之前按名称订购产品。
我该怎么做?
答案 0 :(得分:1)
您似乎有many-to-many relation。您不需要ProductToCategory-Model。
相反,您需要在ProductCategory-Model:
中使用此关系public function products()
{
return $this->belongsToMany('App\Models\Product');
}
您的产品型号中有一个:
public function categories()
{
return $this->belongsToMany('App\Models\ProductCategory');
}
您还可以指定数据透视表的名称(product_to_category-table)和列名称:
public function categories()
{
$this->belongsToMany('App\Models\ProductCategory', 'table_name', 'product_id ', 'product_category_id ');
}
通过这种方式,您可以按如下方式查询:
$linked_products = $category->products()->orderBy('name')->get();