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

时间:2014-07-11 10:40:09

标签: php laravel eloquent

我正在创建类别模型,它具有类别模型本身的父级。 我在模型中做了关系,并以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');
    }

}

1 个答案:

答案 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