在laravel的creating
模型事件中,对即将插入的数据中的字段id
进行了重新设置,当数据插入数据库成功后,laravel自动返回的数据模型中的字段id
的值却为0,而数据库中已经是我之前成功设置的值。
截图如下:
插入数据库后返回的数据:
数据库中的数据:
这两张截图是同一条数据,有什么方法可以解决插入成功后,模型事件中设置的id
的值可以成功返回??
源代码:
trait GeneratePrimaryKeyTrait
{
public static function bootGeneratePrimaryKeyTrait()
{
foreach(static::getModelEvents() as $event) {
if ($event == 'creating') {
static::$event(function ($model) use ($event) {
$model->generatePrimaryKey($model, $event);
});
}
}
}
public static function getModelEvents()
{
if(isset(static::$recordEvents)){
return static::$recordEvents;
}
return ['saving'];
}
public function generatePrimaryKey($model)
{
$primary_key = base_convert(uniqid(true), 16, 10);
if (PrimaryKey::where('primary_key', $primary_key)->first()) {
$primary = PrimaryKey::orderBy('primary_key', 'desc')->first();
$primary_key = $primary->primary_key + 1;
};
PrimaryKey::create(['primary_key' => $primary_key]);
$model->id = $primary_key;
}
}
这是trait,然后在模型中use的
原因已经找到,因为我数据库的主键id不是自增的,而laravel默认的主键id是自增,并且是强制转换为int,所以返回数据时被转换了,因此返回的就会一直是0