我正试图从雄辩的关系中获得第一个laravel模型。如何直接从产品访问子类别?
我拥有的3种型号:
产品(ID,category_id等)
public function categories()
{
return $this->belongsTo('App\Category', 'category_id');
}
类别(ID,名称)
public function products()
{
return $this->hasMany('App\Product', 'category_id');
}
public function sub_categories()
{
return $this->hasMany('App\SubCategory', 'category_id');
}
子类别(ID,category_id,名称)
public function categories()
{
return $this->belongsTo('App\Category', 'category_id');
}
我以为我可以通过
Product::find(1)->categories->sub_categories;
我在这里缺少明显的东西吗?
答案 0 :(得分:0)
阅读此docs
产品
class Product extends Model
{
public function SubCategory()
{
return $this->hasManyThrough('App\Category', 'App\SubCategory');
}
}
答案 1 :(得分:0)
此外,在subCategories
模型上添加Product
方法,并且产品属于类别而不是类别
并且也总是尝试使用驼峰大小写作为方法(subCategories)
以此替换您的代码
产品:
public function category()
{
return $this->belongsTo('App\Category', 'category_id');
}
public function subCategories()
{
return $this->category()->subCategories;
}
类别:
public function products()
{
return $this->hasMany('App\Product', 'category_id');
}
public function subCategories()
{
return $this->hasMany('App\SubCategory', 'category_id');
}
子类别:
public function categories()
{
return $this->belongsTo('App\Category', 'category_id');
}
最后使用它来获取子类别
Product::find(1)->subCategories;
答案 2 :(得分:0)
Product::find(1)->categories
是array
。您将必须循环它以获得每个类别的子类别。见下文
$categories = Product::find(1)->categories;
foreach ($categories as $category {
//Get subcategories for each category
dump($category->sub_categories);
}
答案 3 :(得分:0)
尝试一下:
Product::with(['categories', 'categories.sub_categories'])->find(1)
您将获得带有其子类别的类别数组。