【问题标题】:self-referential many-to-many relationship in Laravel NovaLaravel Nova 中的自引用多对多关系
【发布时间】:2021-05-20 13:51:27
【问题描述】:

我有一个名为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');
    });
  }

我想不出一种方法来要求用户在将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')
    ];
  }

但是在附加资源时,并没有询问我是要添加父级还是子级。

如何指定?

【问题讨论】:

  • 我找不到 BelongsToMany::make() 选项和签名或存储库的任何文档。你能帮我吗?
  • @Abilogos。就官方文档而言,这就是我能找到的全部内容:nova.laravel.com/docs/1.0/resources/…

标签: laravel many-to-many laravel-nova


【解决方案1】:

问题是,您为两个 Nova 关系赋予了相同的名称。尝试给他们起不同的名字:

BelongsToMany::make('Things-childof', 'childOf'),
BelongsToMany::make('Things-parentof', 'parentOf')

【讨论】:

  • 我收到错误消息“App\Nova\ThingsChildof”未找到。第一个参数不是应该对应模型的名称吗?
猜你喜欢
  • 1970-01-01
  • 2019-02-19
  • 2019-02-02
  • 2018-08-19
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多