Laravel Nova自指关系

时间:2018-12-03 14:15:30

标签: php laravel eloquent laravel-nova

在Laravel中,如果我想创建自参照关系,则可以执行以下操作:

.tab-bar {
    margin: 10px 10px;
    border: 1px solid grey;
}

.active-tab {
    border-top: 1px solid red;
}

如何使Laravel Nova资源显示此连接?

class Post extends Eloquent
{
    public function parent()
    {
        return $this->belongsTo('Post', 'parent_id');
    }

    public function children()
    {
        return $this->hasMany('Post', 'parent_id');
    }
}

2 个答案:

答案 0 :(得分:4)

您可以这样实现自己的目标:

BelongsTo::make('Parent', 'parent', Post::class),

HasMany::make('Children', 'children', Post::class),

这将允许您在创建或更新帖子时选择父帖子。当您进入帖子的详细信息页面时,可以看到其所有子级。

public function fields(Request $request)
{
    return [
        Text::make('Autor', 'author'),
        Select::make('Type','type')->options([
            'News' => 'news',
            'Update' =>  'update',
        ]),
        BelongsTo::make('Parent', 'parent', Post::class),
        HasMany::make('Children', 'children', Post::class),
    ];
}

答案 1 :(得分:1)

在另一种情况下,如果您具有父列名称parent以及诸如

的关系parent,也会遇到相同的问题
$table->bigIncrements('id');
$table->string('category');
$table->unsignedBigInteger('parent')->nullable();

和 在模型中

public function parent()
{
   return $this->belongsTo(SELF::class, 'parent');
}

它将无法识别parent属性,并且您将再次遇到此问题,在这种情况下,您可以更改relationship name column name ,它将正常工作。

还请记住Nova BelongsTo关系的参数

参数1.要显示的名称(例如Parent

参数2.模型中使用的关系名称(例如parent

参数3. Nova资源(例如App\Nova\Category