yaleksandr89
@yaleksandr89
PHP developer

Как правильно реализовать удаление категории и перемещение привязанных постов в основную?

Здравствуйте.

Есть какое-то количество категорий
Миграция categories

public function up():void
    {
        Schema::create('blog_categories', static function (Blueprint $table) {
            $table->id();
            $table->bigInteger('parent_id')->unsigned()->default(1);

            $table->string('slug')->unique();
            $table->string('title');
            $table->text('description')->nullable();

            $table->timestamps();
            $table->softDeletes();
        });
    }


Среди них есть "базовая"
5e8376e57044d467256077.png
Все эти категории привязаны к постам
Миграция posts

public function up(): void
    {
        Schema::create('blog_posts', static function (Blueprint $table) {
            $table->id();
            $table->bigInteger('category_id')->unsigned();
            $table->bigInteger('user_id')->unsigned();

            $table->string('slug')->unique();
            $table->string('title');
            $table->text('excerpt')->nullable();

            $table->string('tdk_title')->nullable();
            $table->text('tdk_description')->nullable();
            $table->text('tdk_keywords')->nullable();

            $table->text('content_raw');
            $table->text('content_html');

            $table->integer('view_count')->default(0);
            $table->boolean('is_published')->default(false);
            $table->timestamp('published_at')->nullable();

            $table->timestamps();
            $table->softDeletes();

            $table->index('is_published');

            //FK
            $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');
            $table->foreign('category_id')
                ->references('id')
                ->on('blog_categories')
                ->onDelete('cascade');
        });
    }



Нужно решить две задачи:
  1. Запретить удаление корневой категории. С этим проблем нет, в destroy() проверить id и если он совпадает вернуть сообщение с ошибкой.
  2. Удалить категорию и переместить все связанные посты в корневую. Вот тут я забуксовал, как правильно реализовать?
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Kostik_1993
Web Developer
Удалить категорию и переместить все связанные посты в корневую. Вот тут я забуксовал, как правильно реализовать?


А чего здесь не ясно?
// Перемещаем посты из удаляемой категории в основную
$category->posts()->update(['category_id' => 1]);

// Удаляем категорию
$category->delete();


Но я думаю что все таки вопрос не в этом был и следует его додумать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы