не может воспроизвести модель с уникальным полем - PullRequest
1 голос
/ 25 апреля 2020

Не могу понять, как скопировать модель с уникальным полем slug. Я вижу сообщение об успехе, но этот код не создает дополнительную строку в таблице БД. И никаких сообщений или исключений в панели отладки.


    public function handle(Model $model)
    {
        $model->replicate(['slug']);
        $model->slug = Str::slug($model->title, '-') . $model->id;
        $model->save();
        return $this->response()->success('Скопировано!')->refresh();
    }

И если я добавлю dd($model) где-то посередине, это мне не поможет, потому что я ничего не вижу, кроме сообщения "Ой". enter image description here Вот файл миграции

        Schema::create('news_posts', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->integer('category_id')->unsigned();
            $table->string('title', 255)->nullable();
            $table->string('slug', 255)->unique();
            $table->text('fulltext')->nullable();
            $table->string('image', 255)->nullable();
            $table->boolean('is_published')->default(false);
            $table->timestamp('published_at')->nullable();
            $table->timestamps();
            $table->softDeletes();

            $table->foreign('category_id')->references('id')->on('news_categories');
            $table->index('is_published');
        });

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Model::replicate возвращает новый экземпляр, который вы создаете (реплицирует старый). Вы ничего не делаете с этой новой моделью; Вы не присвоили его переменной. Вы обновляете поле slug существующего экземпляра модели ($model) и пытаетесь сохранить существующий экземпляр модели, а не новый.

Также новый экземпляр модели не будет иметь id до тех пор, пока он не будет сохранен, а не до.

Если вы так генерируете слагов везде, то вам нечего обновлять на существующей модели, и поле слагов не считается грязным, так как это так же, как это было до того, как вы установили его; поэтому на самом деле сохранение не происходит (потому что обновлять нечего).

0 голосов
/ 26 апреля 2020

Это работает.

        $new = $model->replicate();
        $new->slug = $new->slug . time();
        $new->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...