提问者:小点点

我正在创建类别模型,其中它有类别模型本身的父级


我正在创建类别模型,其中它有类别模型本身的父级。。我在模型中处理了关系,并以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-

另外,在哪种情况下,我们必须在模型中定义表名,因为如果我不这样做的话,它可以正常工作。

==================================类别模型====================

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');
    }

}

共1个答案

匿名用户

您的某些类别没有父级,它们是根节点,因此您必须选中它$category-

现在,不要使用isset,因为关系没有设置为对象的属性。改用这个:

if (count($category->parent)) // do something

// or is_null
if (is_null($category->parent));

另外get()返回集合,您需要的是返回单个模型的first()

我建议您阅读这个关于递归关系的答案,以便更轻松地使用您的设置:自引用表get N level hierarchy JSON中的Laravel ORM

还有这个,所以你知道为什么我建议用count而不是is_null来检查相关模型:Laravel检查相关模型是否存在