1. 程式人生 > >Laravel $model->save()的相關底層實現邏輯程式碼

Laravel $model->save()的相關底層實現邏輯程式碼

    相信很多人就對這個問題很疑惑:

   $model = new Model(); $mdoel->user_name = $userName;$mdoel->save();

       其中的user_name是怎麼給賦值上的呢?我以前也比較困惑,後來看看底層的相關程式碼,才撥開雲霧。
        列印過物件大家其實都知道里面有這個受保護的屬性

    [attributes:protected] => Array()

在例項化物件的時候,被繼承的model類的建構函式會執行syncOriginal()方法,這個方法的作用其實就是初始化屬性attributes到屬性$original中。

當我們在對物件關聯的表的欄位賦值的時候,會採用$newModel->param=$paramValue;這個時候,其實呼叫的是Model裡面的魔術方法__set();

給欄位和欄位值設定到attributes物件屬性陣列中。

然後在save的時候,會呼叫Illuminate\Database\Query\Builder->insert($value)方法,$value就是對應的$attributes.當然這個save也是預編譯繫結變數的方式。