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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何迭代與代理和對(duì)象混合的 Doctrine 集合

如何迭代與代理和對(duì)象混合的 Doctrine 集合

PHP
呼如林 2023-09-22 17:52:59
我在一個(gè)需要來自多個(gè)表的數(shù)據(jù)的項(xiàng)目中使用 Doctrine。為了避免 N + 1 問題,我在進(jìn)入視圖之前獲取我需要的所有數(shù)據(jù)。正如我在文檔中看到的,執(zhí)行此操作的方法是與表進(jìn)行聯(lián)接,然后使用聯(lián)接表的別名調(diào)用 addSelect。問題是,當(dāng)我構(gòu)建所需的查詢并調(diào)用 getResult 時(shí),Doctrine 返回實(shí)體對(duì)象和連接實(shí)體的代理的集合,這會(huì)在視圖中的數(shù)組迭代期間導(dǎo)致問題,因?yàn)榇頉]有與實(shí)體對(duì)象具有相同的屬性。我對(duì)這種行為真的很困惑。你能幫我解決這個(gè)問題嗎?
查看完整描述

1 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊

您獲得代理對(duì)象是因?yàn)樗鼈兪茄舆t加載的,這是正確的。您不應(yīng)該對(duì)它們有任何問題,因?yàn)楫?dāng)您迭代集合時(shí),所有數(shù)據(jù)都應(yīng)該正確設(shè)置。代理通常表現(xiàn)得像完全加載的實(shí)體。如果您遇到問題,也許問題出在其他地方。EAGER但是,您可以在關(guān)系中設(shè)置 fetch to來強(qiáng)制構(gòu)建完整的實(shí)體。


@ManyToOne(targetEntity="target", fetch="EAGER")

@JoinColumn(name="target", referencedColumnName="id")

此外,您還可以使用$query->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);水合查詢中的所有對(duì)象。你也可以嘗試一下$queryBuilder->getQuery()->setHint (Query::HINT_FORCE_PARTIAL_LOAD, true)->get();


您也可以在迭代過程中自行加載代理對(duì)象。類似的東西


foreach($collection as $object) {

    if ($object instanceof Doctrine\ORM\Proxy\Proxy) {

        $object->__load();

    }

}

但是,您可以發(fā)布您的代碼(實(shí)體、存儲(chǔ)庫中的查詢和視圖部分),因?yàn)榇聿粦?yīng)該有任何問題。


查看完整回答
反對(duì) 回復(fù) 2023-09-22
  • 1 回答
  • 0 關(guān)注
  • 105 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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