1

我无法理解如何复制具有唯一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)在中间的某个地方添加它对我没有帮助,因为除了 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');
        });
4

2 回答 2

1

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

此外,新模型实例id在保存之前不会有,而不是之前。

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

于 2020-04-25T17:08:48.540 回答
0

这是有效的。

        $new = $model->replicate();
        $new->slug = $new->slug . time();
        $new->save();
于 2020-04-26T09:00:37.773 回答