91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel中Pivot模型ID的示例分析

發布時間:2021-04-20 12:44:31 來源:億速云 閱讀:202 作者:小新 欄目:編程語言

小編給大家分享一下laravel中Pivot模型ID的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Laravel 是什么

Laravel 是一套簡潔、優雅的PHP Web開發框架。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網絡APP,而且每行代碼都可以簡潔、富于表達力。

項目環境

老系統(linux + laravel5.6 + php7.2 + mysql5.7)

升級后新系統(linux +laravel5.8 + php7.2 + mysql5.7)

只單純升級了laravel框架版本,并無升級其他相關服務依賴.

但是卻出現大量的SQL執行錯誤,異常監控如下:

laravel中Pivot模型ID的示例分析

分析過程

導致這段服務出錯的是這樣的一段業務邏輯,下面通過一段demo來模擬.

$pivot = UserRole::firstOrCreate([
    'user_id' => 3,
    'role_id' => 3,
]);
$this->addRoleHistory($user,$pivot->id);
dd($pivot->id);

在laravel5.6版本中這段代碼運行起來毫無問題,但升級到5.8版本中就會引發大量的SQL執行錯誤,就像下面這樣.

laravel5.6:
    dd($pivot->id); //10002
laravel5.8:
    dd($pivot->id); //null

在5.6中保存中的數據還能正常獲取到ID,在5.8中怎么就不行了呢,于是馬上去查看了laravel5.8的發行說明,也沒有發現對Pivot模型取消獲取自增ID的改動,于是開始進行5.8源碼查閱。。。

首先對5.6和5.8的firstOrCreate函數進行了對比,發現無改動,代碼邏輯執行無誤。

laravel中Pivot模型ID的示例分析

然后繼續翻閱model->save()函數的代碼

,發現不存在的數據是通過insertAndSetId該函數插入數據并設置主鍵ID

laravel中Pivot模型ID的示例分析

但insertAndSetId函數又是通過incrementing這樣的一個成員屬性來控制的,屬性的默認值是true

laravel中Pivot模型ID的示例分析

當這個屬性變更時就不會執行者一步驟,難道這個成員屬性在被操作過了?

于是立馬查看了5.8的pivot模型源碼.

laravel中Pivot模型ID的示例分析

最終發現是5.8的在中間表Pivot Class默認將incrementing設置成了false,所以數據被成功插入,但是沒有設置插入后的主鍵ID,造成剩余服務崩潰,沒能正常運行...

修復方案

在每個Pivot Class中重新覆蓋掉incrementing屬性值為true即可.

class UserRole extends Pivot
{
    public $incrementing = true;
    protected $fillable = [
        'user_id',
        'role_id',
    ];
}

修復后:

laravel5.8:
    dd($pivot->id); //10003

以上是“laravel中Pivot模型ID的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天津市| 汝南县| 上蔡县| 新民市| 鹿邑县| 司法| 延长县| 资源县| 永顺县| 灵寿县| 胶州市| 盐池县| 东港市| 荥经县| 彩票| 天水市| 建阳市| 乐陵市| 屏山县| 易门县| 东至县| 紫金县| 夏邑县| 大足县| 五华县| 漳浦县| 宁武县| 绥棱县| 襄汾县| 桂平市| 曲阳县| 鹤壁市| 曲松县| 天门市| 台中县| 合江县| 固镇县| 冕宁县| 丰县| 汤阴县| 辛集市|