无法复制具有唯一 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();
我无法理解如何复制具有唯一 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();