gpt4 book ai didi

php - Doctrine 2,HINT_FORCE_PARTIAL_LOAD 不会获取连接的实体

转载 作者:行者123 更新时间:2023-11-29 04:38:12 24 4
gpt4 key购买 nike

有一张代金券:

/**
* @ORM\OneToMany(targetEntity="VoucherCode", mappedBy="voucher")
*/
protected $voucherCode;

和凭证代码:

/**
* @var \Doctrine\Entity\Voucher
*
* @ORM\ManyToOne(targetEntity="Doctrine\Entity\Voucher", inversedBy="voucherCode")
* @ORM\JoinColumn(name="voucher_id", referencedColumnName="id")
*/
protected $voucher;

如果我在 voucherCode 上执行查询生成器并添加 $qb->leftJoin('x.voucher', 'v'); 那么它不会查询凭证,-> getVoucher() 为 NULL...虽然查看 DQL,leftjoin 确实发生了。

如果我删除 ->setHint(\Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD, true)); 然后它工作正常。怎么了?

最佳答案

The documentation对于如何使用该查询提示集加载相关对象并不清楚(至少对我而言),就像您的情况一样:

Query::HINT_FORCE_PARTIAL_LOAD - Allows to hydrate objects although not all their columns are fetched. This query hint can be used to handle memory consumption problems with large result-sets that contain char or binary data. Doctrine has no way of implicitly reloading this data. Partially loaded objects have to be passed to EntityManager::refresh() if they are to be reloaded fully from the database.

我的猜测是您可以保留提示,但是您的 DQL 必须包含优惠券的部分代码 (SELECT partial x.{voucher_id, name}...)。

如果您最大的相关对象始终加载您自己的 DQL,您可以删除此查询提示并始终加载您自己的部分查询。通常我更喜欢使用自定义存储库和 DQL 来优化内存消耗和性能。

关于php - Doctrine 2,HINT_FORCE_PARTIAL_LOAD 不会获取连接的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com