2016-10-20 79 views
1

考慮以下代碼使用Eloquent Model類。靜態方法「where」的實現在哪裏?

$match_get1 = Model::where(SyncVariableConstant::MAIN_ID_FIELD_NAME, $sqlId)->get(); 

我真的不明白的地方是的定義,其中在型號::類方面靜態方法。模型類不執行方法其中source)。

很顯然,我認爲這是一種PHP mecanism的我不familar與...

是否sommeone有一個交代?

在此先感謝

回答

0

模型一般延伸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()

+0

雄辯不是一個門面。 – lagbox

0

的「魔力」實際發生的魔術方法__callStaticModel.php__call()內。

如果在該類中找不到方法,則很可能是由這些魔術方法處理。

如果你在__call()裏面加上dd($method);,你會得到where

PHP doc

__call()中的對象上下文調用不可訪問方法時被觸發。

相關問題