第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

預加載是否區(qū)分大小寫?

預加載是否區(qū)分大小寫?

PHP
達令說 2023-09-08 17:09:43
考慮到文檔https://laravel.com/docs/5.0/eloquent#eager-loading讓我們有以下示例:$clients = Clients::with('Addresses')->get();我們現(xiàn)在可以addresses像這樣循環(huán):foreach ($clients->Addresses ..)  foreach ($clients->addresses ..)如果我們使用第一種方法(區(qū)分大小寫),這是否意味著預加載結(jié)果將被忽略,并且是否會執(zhí)行另一個查詢?如你所知,如果我們這樣做:$clients = Clients::get();我們?nèi)匀豢梢匝h(huán)訪問地址,但將進行另一個查詢。foreach ($clients->Addresses ..)
查看完整描述

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應該是您的首選方法。


查看完整回答
反對 回復 2023-09-08
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號