鍍金池/ 問(wèn)答/PHP/ laravel模型事件中設(shè)置的字段值在模型創(chuàng)建成功后沒(méi)有返回?

laravel模型事件中設(shè)置的字段值在模型創(chuàng)建成功后沒(méi)有返回?

在laravel的creating模型事件中,對(duì)即將插入的數(shù)據(jù)中的字段id進(jìn)行了重新設(shè)置,當(dāng)數(shù)據(jù)插入數(shù)據(jù)庫(kù)成功后,laravel自動(dòng)返回的數(shù)據(jù)模型中的字段id的值卻為0,而數(shù)據(jù)庫(kù)中已經(jīng)是我之前成功設(shè)置的值。
截圖如下:
插入數(shù)據(jù)庫(kù)后返回的數(shù)據(jù):圖片描述

數(shù)據(jù)庫(kù)中的數(shù)據(jù):圖片描述

這兩張截圖是同一條數(shù)據(jù),有什么方法可以解決插入成功后,模型事件中設(shè)置的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的

回答
編輯回答
焚音

原因已經(jīng)找到,因?yàn)槲覕?shù)據(jù)庫(kù)的主鍵id不是自增的,而laravel默認(rèn)的主鍵id是自增,并且是強(qiáng)制轉(zhuǎn)換為int,所以返回?cái)?shù)據(jù)時(shí)被轉(zhuǎn)換了,因此返回的就會(huì)一直是0

2018年8月18日 06:03
編輯回答
瘋子范

用lareval eloquent 做數(shù)據(jù)的插入 返回的結(jié)果就是你插入的這條數(shù)據(jù)的對(duì)象??!

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

2017年5月5日 19:08
編輯回答
怣人

能貼一下你創(chuàng)建數(shù)據(jù), 并且響應(yīng)的代碼嗎?

2017年4月21日 01:17