我正在创建类别模型,它具有类别模型本身的父级。 我在模型中做了关系,并以json格式给出了输出。当我做的时候
{{ $category->parent }}
它给了我:
{"id":1,"name":"test","slug":"test","parent_id":0,"is_active":0,"created_at":"-0001-11-30 00:00:00","updated_at":"-0001-11-30 00:00:00"}
如果我尝试
{{ $category->parent()->name }}
它给出了错误。
有关如何获取父行对象的任何建议,以便$category->parent()->name
可以工作。
同样在哪种情况下我们必须在模型中定义表名,因为如果我不这样做也可以正常工作。
=======================类别模型====================
class Category extends Eloquent {
protected $fillable = array('name', 'slug', 'parent_id', 'is_active');
public static $rules = array(
'name' => 'required|min:3',
'slug' => 'required',
);
public function parent(){
return $this->belongsTo('Category', 'parent_id');
}
public function children() {
return $this->hasMany('Category', 'parent_id');
}
}
答案 0 :(得分:2)
您的某些类别没有父级,它们是根节点,因此您必须首先检查它$category->parent
,然后访问其属性。
现在,不要使用isset
,因为关系不是设置为对象的属性。请改用:
if (count($category->parent)) // do something
// or is_null
if (is_null($category->parent));
同样get()
返回集合,你想要的是返回单个模型的first()
。
我建议您阅读有关递归关系的回答,以便更轻松地使用您的设置: Laravel ORM from self referencing table get N level hierarchy JSON
还有这一个,所以你知道为什么我建议count
而不是is_null
检查相关模型:
Laravel check if related model exists