Я только начал использовать 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();
});
Я использую этот пакет , чтобы сделать мою модель категории вложенной.Этот пакет определяет отношения для родителя следующим образом:
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'));
}
Но я не получаю текущий resourceId в методе relatableCategories.
Есть ли другой способ получитьИдентификатор ресурса, который я редактирую внутри этого метода.Я также пытался использовать $request->findResourceOrFail()
, но не повезло.
Пожалуйста, помогите.