【发布时间】:2021-03-03 09:50:06
【问题描述】:
我的应用中有以下 3 个模型:
- 产品
- 子类别
- 类别
产品属于属于某个类别的子类别。每个产品只属于一个子类,一个子类可以有N个产品但只属于一个类,一个类也可以有多个子类。
此时我可以从一个产品转到他的子类别并跳转到主类别,这里是 tinker 控制台的示例:
>>> $product = App\Models\Product::Find(1);
=> App\Models\Product {#4156
id: "1",
name: "Jersey",
description: "Black Jersey",
type_id: "1",
brand_id: "1",
subcategory_id: "1",
created_at: "2021-03-03 00:46:26",
updated_at: "2021-03-03 00:46:26",
}
>>> $product->subcategory;
=> App\Models\Subcategory {#3684
id: "1",
category_id: "1",
name: "Top",
created_at: "2021-03-03 00:44:31",
updated_at: "2021-03-03 00:44:31",
}
>>> $product->subcategory->category;
=> App\Models\Category {#4246
id: "1",
category: "Clothing",
created_at: "2021-03-03 00:42:14",
updated_at: "2021-03-03 00:42:14",
}
>>>
但是当我尝试从一个类别到另一个子类别并获得所有具有相同子类别的产品时,我会收到此错误:
>>> $category = App\Models\Category::Find(1);
=> App\Models\Category {#4299
id: "1",
category: "Clothing",
created_at: "2021-03-03 00:42:14",
updated_at: "2021-03-03 00:42:14",
}
>>> $category->subcategory;
=> Illuminate\Database\Eloquent\Collection {#4305
all: [
App\Models\Subcategory {#4300
id: "1",
category_id: "1",
name: "Top",
created_at: "2021-03-03 00:44:31",
updated_at: "2021-03-03 00:44:31",
},
],
}
>>> $category->subcategory->product;
Exception with message 'Property [product] does not exist on this collection instance.'
>>>
以下是我使用的模型:
产品:
public function subcategory(){
return $this->belongsTo(Subcategory::class);
}
类别:
public function subcategory(){
return $this->hasMany(Subcategory::class);
}
子类别:
public function category(){
return $this->belongsTo(Category::class);
}
public function product(){
return $this->hasMany(Product::class);
}
我希望能够获取属于同一类别(即属于不同子类别但属于同一类别)或所有相同子类别的所有产品。
【问题讨论】: