laravel - Laravel Nova 中的自引用多对多关系
问题描述
我有一个名为的表things
,它有一个数据透视表thing_thing
。显然,这是一个自引用的多对多关系。
我在Thing
模型中定义了以下方法:
public function parentOf (){
return $this->belongsToMany(Thing::class, 'thing_thing', 'parent_id', 'child_id');
}
public function childOf(){
return $this->belongsToMany(Thing::class, 'thing_thing', 'child_id', 'parent_id');
}
我的thing_thing
迁移如下所示:
public function up()
{
Schema::create('thing_thing', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('message')->nullable();
$table->unsignedBigInteger('parent_id')->nullable();
$table->unsignedBigInteger('child_id')->nullable();
$table->unique(['parent_id', 'child_id']);
$table->foreign('parent_id')->references('id')->on('things')->onDelete('cascade');
$table->foreign('child_id')->references('id')->on('things')->onDelete('cascade');
});
}
我想不出一种方法来要求用户在将 a 附加thing
到另一个时指定thing
它应该是孩子还是父母。我的新星资源有以下内容:
public function fields(Request $request)
{
return [
ID::make(__('ID'), 'id')->sortable(),
Text::make('label'),
ID::make('user_id')->hideWhenUpdating()->hideWhenCreating(),
BelongsToMany::make('Trees', 'trees'),
BelongsToMany::make('Things', 'childOf'),
BelongsToMany::make('Things', 'parentOf')
];
}
但是在附加资源时,没有询问我是否要添加父母或孩子。
我该如何指定?
解决方案
问题是,您为两个 Nova 关系赋予了相同的名称。尝试给他们不同的名字:
BelongsToMany::make('Things-childof', 'childOf'),
BelongsToMany::make('Things-parentof', 'parentOf')