【发布时间】:2015-11-22 02:58:49
【问题描述】:
我有三个模型都是一对多相关的。类别、子类别和样式。我的关系是双向的——尽管我似乎在访问相关属性时遇到了问题。
在我的查询运行后,我留下了一个 Style 实例,其中“relations”是 Subcategory 的一个实例,而 Subcategory 中的“relations”是 Category 的一个实例。这是正确的。
问题是我现在似乎无法访问相关的模型实例。例如,如果我调用:
$style->subcategory->name;
我得到“试图获取非对象的属性”。所以我尝试只调用 $style->subcategory,结果是 '1'。
为什么 $style->subcategory 不返回子类别模型的实例?是我遗漏了什么还是我的理解不正确?
--编辑--
模型
分类
<?php
namespace Paragon\Products;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Category extends Eloquent {
protected $table = 'product_categories';
protected $fillable = [
'name',
'slug',
'image'
];
public function subcategories() {
return $this->hasMany('Paragon\Products\Subcategory', 'category');
}
}
子类
<?php
namespace Paragon\Products;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Subcategory extends Eloquent {
protected $table = 'product_subcategories';
protected $fillable = [
'category',
'name',
'slug',
'image'
];
public function styles() {
return $this->hasMany('Paragon\Products\Style', 'subcategory');
}
public function category() {
return $this->belongsTo('Paragon\Products\Category', 'category');
}
}
风格
<?php
namespace Paragon\Products;
use Illuminate\Database\Eloquent\Model as Eloquent;
class Style extends Eloquent {
protected $table = 'product_styles';
protected $fillable = [
'subcategory',
'name',
'slug',
'image'
];
public function subcategory() {
return $this->belongsTo('Paragon\Products\Subcategory', 'subcategory');
}
}
查询
$style->where($id, $item)->with('subcategory.category')->first();
表格
典范\产品\类别
ID ...
1
2
Paragon\Products\子类别
ID Category ...
1 2
2 2
典范\产品\风格
ID Subcategory ...
1 1
2 1
由于 Style 模型中的 subcategory 方法应该引用 Subcategory 的单个实例而不是它们的 Collection,我不应该能够以我(或正在尝试)的方式调用属性吗?
【问题讨论】:
-
你是如何查询关系的?你的
styles表上有subcategory列吗?它可能会返回该列的值而不是相关模型。 -
你确定除了hasMany之外还设置了belongsTo关系吗?
-
您需要向我们展示您的模型,以便我们为您提供帮助。
-
@user3158900 我愿意!这可能是问题..
-
@AdrianFlannery 我已经设置好了,见上文
标签: php laravel eloquent models