拉拉维尔-新星自我参照关系



在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', AppNovaPost::class),
HasMany::make('Children', 'children', AppNovaPost::class),

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

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

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

还有另一种情况,如果您有父列名parent和类似的关系parent,您会发现同样的问题

$table->bigIncrements('id');
$table->string('category');
$table->unsignedBigInteger('parent')->nullable();

以及型号

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

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

还要记住NovaBelongsTo关系的论点

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

论点2。模型中使用的关系的名称(例如parent(

论点3。Nova资源(例如AppNovaCategory(

最新更新