php - 如何覆盖使用 haruncpi/IdGenerator 格式化的 Laravel Eloquent 模型 ID
问题描述
我正在尝试格式化并在 Eloquent 模型 id ( OrderItem::$id
) 前面加上一个字符串和当前年份,例如。P-2021-3958、P-2021-1234、P-2022-1443。
我找到并安装了haruncpi/laravel-id-generator,并根据其他各种 stackoverflow 答案对其进行了配置。
不幸的是,当将Field
模型附加到相应的OrderItem
belongsToMany 时,这会失败:
$orderItem->fields()->attach(
$field_id,
['value' => "somevalue"]);
抛出此异常:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db`.`field_order_item`, CONSTRAINT `field_order_item_order_item_id_foreign` FOREIGN KEY (`order_item_id`) REFERENCES `order_items` (`id`)) (SQL: insert into `field_order_item` (`created_at`, `field_id`, `order_item_id`, `updated_at`, `value`) values (2021-04-07 14:20:57, 28, 0, 2021-04-07 14:20:57, saepe))
这是迁移的相关部分:
//order_items table
$table->string('id)->unique();
//fields table
$table->string('order_item_id');
$table->foreign('order_item_id')->references('id')->on('order_items');
这是OrderItem::boot()
方法:
parent::boot();
self::creating(function ($model){
$id = IdGenerator::generate( [
'table' => 'order_items',
'length' => '11',
'prefix' => date( 'Y' ).'/',
'reset_on_prefix_change' => false,
] );
ray( $id );
$model->id = $id;
ray()->model($model);
});
第一个ray
调用正确输出了格式化的 id,第二个调用输出了 ID 设置为的模型int(2021)
解决方案
推荐阅读
- svn - Cornerstone / SVN:它在哪里存储它的控制文件?
- jenkins-pipeline - 无法将两封电子邮件添加到: emailext
- r - 将包含日期的文件名转换为QQ-YYYY格式并作为R中N个excel文件的列插入
- jquery - 如何通过 jQuery 从我的 DIV 标签中传递一个变量?
- python - 如何让每只宠物的跳蚤数量不同
- r - R Shiny Leaflet - 如何在添加新标记之前清除以前的标记/圆圈/等
- c# - C# HTTP GET 总是首先尝试连接
- assembly - 汇编读取用户对寄存器的输入会产生意想不到的价值
- javascript - 如何在 JavaScript 中对二维数组进行排序?
- python - 过滤numpy数组但保留原始值