laravel模型事件中设置的字段值在模型创建成功后没有返回?

在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的

回复
阅读 2.4k
3 个回答

原因已经找到,因为我数据库的主键id不是自增的,而laravel默认的主键id是自增,并且是强制转换为int,所以返回数据时被转换了,因此返回的就会一直是0

用lareval eloquent 做数据的插入 返回的结果就是你插入的这条数据的对象啊!

$input = ['goods_id'=>1,'buyer_id'=>1,'seller_id'=>1];
$result = Dialog ::create($input);
dd($result);
返回值:Model对象

能贴一下你创建数据, 并且响应的代码吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏