Laravel Nova 自我参照关系

问题描述 投票:0回答:3

在 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
    ];
}
php laravel eloquent laravel-nova
3个回答
9
投票

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

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

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

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

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模型。


3
投票

还有另一种情况,如果您有父列名称

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


0
投票

确保资源中有代表显示名称的标题

Post Category extends Resource
{
       public static $title = 'name';
}
© www.soinside.com 2019 - 2024. All rights reserved.