1 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
從一些快速測試來看,雖然 Eager Loaded 實際上不區(qū)分大小寫,但只有在加載和訪問時使用相同大小寫時才會如此。對于你的例子:
$clients = Client::with(['addresses' => function ($q) {
$q->limit(2);
}])->get();
// Good
foreach ($clients as $client){
foreach ($client->addresses as $address) {
// Should loop twice and output 2 Addresses
}
}
// Bad
foreach ($clients as $client){
foreach ($client->Addresses as $address) {
// Will loop X times for each associated `address`
}
}
使用DB::enableQueryLog()
和DB::getQueryLog()
可以幫助調(diào)試。如果您急于加載,您應該看到一行:
"query" => "select * from `addresses` where `addresses`.`client_id` in (...) limit 1
如果在迭代時運行附加查詢,您將看到每個客戶端的查詢:
"query" => "select * from `addresses` where `addresses`.`client_id` = ? and `addresses`.`client_id` is not null",
還有許多其他方法可以對此進行測試,但總而言之,訪問$client->addresses
和$client->Addresses
實際上會產(chǎn)生不同的結(jié)果,即使它們看起來相似。使用與訪問時使用的相同的案例來加載,就可以了。studlyCaps
請注意,由于關(guān)系是函數(shù),因此對 PHP 函數(shù)(又名)使用正確的大小寫pascalCase
應該是您的首選方法。
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報