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

Php 我正在创建类别模型,其中它有类别模型本身的父级,php,laravel,eloquent,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-&

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

}

您的某些类别没有父级,它们是根节点,因此必须先检查它
$category->parent
,然后访问其属性

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

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

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

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

我建议您阅读以下有关递归关系的回答,以便更轻松地使用设置:

还有这个,所以你知道为什么我建议用
count
而不是
is\u null
来检查相关模型:

您可以尝试
$category->parent->name
$category->parent()->get()->name
@Razor
$category->parent->name
尝试获取非对象的属性
和$category->parent()->get()->name give
未定义属性:illumb\Database\elounce\Collection::$name
您的关系函数是什么样子的
{{$category->parent}
不应输出整个模型的json。@user3158900请检查编辑。您的某些类别没有父级,它们是根节点,因此必须先检查
$category->parent
是否不为空,然后访问其属性
get()
返回集合,您需要的是返回单个模型的
first()