考慮以下代碼使用Eloquent Model類。靜態方法「where」的實現在哪裏?
$match_get1 = Model::where(SyncVariableConstant::MAIN_ID_FIELD_NAME, $sqlId)->get();
我真的不明白的地方是的定義,其中在型號::類方面靜態方法。模型類不執行方法其中(source)。
很顯然,我認爲這是一種PHP mecanism的我不familar與...
是否sommeone有一個交代?
在此先感謝
考慮以下代碼使用Eloquent Model類。靜態方法「where」的實現在哪裏?
$match_get1 = Model::where(SyncVariableConstant::MAIN_ID_FIELD_NAME, $sqlId)->get();
我真的不明白的地方是的定義,其中在型號::類方面靜態方法。模型類不執行方法其中(source)。
很顯然,我認爲這是一種PHP mecanism的我不familar與...
是否sommeone有一個交代?
在此先感謝
模型一般延伸Eloquent
外觀,這只是一個基礎app('db')
實例的快捷方式。
您正在查找的where()
方法駐留在\Illuminate\Database\Query\Builder
命名空間中。 Eloquent ORM使用此名稱空間,其代碼位於\Illuminate\Database\Eloquent\Builder
名稱空間內。這兩個類都有where()
方法。如果你檢查後面的類,你會看到在它的構造函數中注入了前一類作爲依賴項(即依賴注入)。
簡而言之,\Illuminate\Database\Eloquent\Builder
是\Illuminate\Database\Query\Builder
的高級用戶,兩者都實現了where()
。
以及如何調用高層次\Illuminate\Database\Eloquent\Builder
?正如另一位用戶在這裏已經指出的那樣,通過吸魔師__call()
的「魔力」實際發生的魔術方法__callStatic
和Model.php
__call()
內。
如果在該類中找不到方法,則很可能是由這些魔術方法處理。
如果你在__call()
裏面加上dd($method);
,你會得到where
。
從PHP doc:
__call()中的對象上下文調用不可訪問方法時被觸發。
雄辯不是一個門面。 – lagbox