Laravel Nova 自指关系

Laravel Nova Self-referential Relationship

在 Laravel 中,如果我想创建一个自引用关系,我可以执行以下操作:

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

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

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

public function fields(Request $request)
{
    return [
        Text::make('Autor', 'author'),
        Select::make('Type', 'type')->options([
            'News' => 'news',
            'Update' => 'update',
        ]),
        BelongsToMany::make('Post') // does not work
    ];
}

你可以这样实现你想要的:

BelongsTo::make('Parent', 'parent', \App\Nova\Post::class),

HasMany::make('Children', 'children', \App\Nova\Post::class),

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

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

注意:请注意BelongsTo::make()HasMany::make()的第三个参数是对Post的引用资源,不是Post模型。

还有另一种情况,您会发现同样的问题,如果您有父列名称 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