无法复制具有唯一 slug 字段的模型

cannot replicate model with unique slug field

我无法理解如何复制具有唯一 slug 字段的模型。 我看到成功消息,但此代码不会在 DB table 中创建额外的行。 调试栏中没有消息或异常。


    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) 它对我没有帮助,因为除了 Oops 消息我什么都看不到。 这是迁移文件

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

Model::replicate returns 您正在创建的新实例(复制旧实例)。您没有对这个新模型做任何事情;您尚未将其分配给变量。您正在更新 现有 模型实例 ($model) 的 slug 字段并尝试保存现有模型实例,而不是新模型实例。

此外,新模型实例只有在保存之后才会有 id,之前不会。

如果这就是您在任何地方生成 slug 的方式,那么您无需在现有模型上更新任何内容,并且 slug 字段不被视为脏字段,因为它与设置它之前相同;所以实际上没有保存(因为没有什么要更新)。

这是有效的。

        $new = $model->replicate();
        $new->slug = $new->slug . time();
        $new->save();