【问题标题】:laravel nova - how to make a self referential model with restrictionlaravel nova - 如何制作有限制的自引用模型
【发布时间】:2021-05-21 13:23:23
【问题描述】:

我有一个基于下表的 laravel 模型:

public function up()
{
    Schema::create('things', function (Blueprint $table) {
        $table->id();
        $table->timestamps();
        $table->string('label');
        $table->foreignId('user_id')->nullable()->constrained('users');
    });

还有一个数据透视表使它成为一个多对多自引用模型。

  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');
    });
  }

当我创建链接到此模型的 Nova 资源时,我想限制将 thing 附加到自身。例如,带有id = 1thing 不会出现在带有id = 1 的事物的附件选择器中。这是我的 Nova 资源:

  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')
    ];
  }

【问题讨论】:

    标签: php laravel many-to-many laravel-nova self-reference


    【解决方案1】:

    你可以通过App\Nova\RessourcerelatableQuery方法解决这个问题。只需覆盖 nova 资源中的方法:

    class Thing extends Resource {
    
        // ...
    
        public static function relatableQuery(NovaRequest $request, $query)
        {
            // Make sure you only apply the filter to the things-things relatable query
            if( $request->route('resource') === 'things' ) {
                $currentId = $request->route('resourceId');
                $query->where('id', '!=', $currentId);
            }
            return $query
        }
    }
    
    

    您可以找到文档here

    此外,您可能希望在迁移中使 parent_idchild_id 的列组合唯一,以进一步确保唯一性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2019-02-14
      • 2011-12-20
      • 2015-03-29
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      相关资源
      最近更新 更多