我刚刚开始使用Laravel Nova。我有一个具有以下结构的类别表:
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('slug')->unique();
$table->unsignedBigInteger('parent_id')->nullable()->default(null);
$table->unsignedInteger('_lft')->nullable()->default(null);
$table->unsignedInteger('_rgt')->nullable()->default(null);
$table->json('meta')->nullable()->default(null);
$table->timestamps();
});
我正在使用this package来嵌套我的类别模型。该软件包通过以下方式为父级定义关系:
public function parent()
{
return $this->belongsTo(get_class($this), $this->getParentIdName())
->setModel($this);
}
我创建了Nova资源并创建了一个字段:
BelongsTo::make('Categories', 'parent'),
一切正常。
现在的问题是,当我在父级下拉列表中编辑类别时,我将获得所有类别,包括我正在编辑的类别。我想从下拉列表中删除要更新的类别,因为类别不能是其自己的父项。
我尝试使用relatableCategories
之类的功能:
public static function relatableCategories(NovaRequest $request, $query)
{
if ($request->route()->hasParameter('resourceId'))
return $query->where('id', '<>', $request->route('resourceID'));
}
但是我没有在relatableCategories方法中获得当前的resourceId。
是否还有其他方法可以在此方法中获取正在编辑的资源的ID。我也尝试使用$request->findResourceOrFail()
,但没有运气。
请帮助。