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

Laravel 无法复制具有唯一slug字段的模型,laravel,replicate,laravel-admin,Laravel,Replicate,Laravel Admin,我无法理解如何使用唯一的slug字段复制模型。 我看到了成功消息,但这段代码并没有在DB表中创建额外的行。 调试栏中没有消息或异常 public function handle(Model $model) { $model->replicate(['slug']); $model->slug = Str::slug($model->title, '-') . $model->id; $model->s

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


    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)< /代码>这对我没有帮助,因为除了OOP消息之外,我什么也看不到。 这是迁移文件

        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
返回您正在创建的新实例(复制旧实例)。你没有做任何事情与这种新模式;您尚未将其分配给变量。您正在更新现有模型实例(
$model
)的slug字段,并尝试保存现有模型实例,而不是新实例

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

如果这就是到处生成slug的方式,那么现有模型上没有任何可更新的内容,slug字段不会被视为脏字段,因为它与设置之前的字段相同;因此,实际上没有保存(因为没有要更新的内容)。

这是可行的

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

必须查看devtools上的网络选项卡在chrome devtools中找不到任何有用的东西<代码>模型:{data:{App\models\NewsPost:1,Encore\Admin\Auth\Database\Administrator:1},count:2}count:2数据:{App\models\NewsPost:1,Encore\Admin\Auth\Database\Administrator:1}App\models\NewsPost:1 Encore\Admin\Auth\Database\Administrator:1如果您提到的都是真的,然后,您如何解释这样一个事实:如果表中没有唯一的字段,那么simple
$model->replicate()->save()
在数据库表中为我提供新行?因为
$model->replicate()
返回一个新模型实例,然后在该新模型实例上调用
save
(保存一条新记录,因为它是一个不存在的模型)。。。虽然不确定它为slug字段节省了什么。。。我可能会让该字段为空,这样我可以在创建slug之后设置slug。slug不能为空,并且应该是唯一的,因为它是uri的一部分。如果在保存新模型实例之前,
id
不存在,那么我希望我们可以为slug使用不同的文本。例如
$model->replicate(['slug']);$model->slug=Str::slug($model->title,'-')。'-拷贝';$model->save()但它也不工作,因为
$model
是旧模型实例,而不是新的复制模型。。。再一次