脚本宝典收集整理的这篇文章主要介绍了php – 可以使用SQL函数的结果作为Doctrine中的一个字段吗?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
public function getReviewsCount() { return count($this->Reviews); }
但是我想使用@R_419_2524@来最大限度地减少数据库查询的数量并提高性能,因为通常我可能不需要加载数百条评论,但仍需要知道该数字.我认为运行@R_419_2524@的COUNT将比通过100个产品快得多,并为每个产品计算100个评论.而且,这只是一个例子,在实践中我需要更复杂的功能,我认为MysqL会处理得更快.如我错了请纠正我.
use Doctrine\ORM\Query\ResultSetMapping; $@R_419_2524@ = ' SELECT p.*,COUNT(r.id) From products p LEFT JOIN reviews r ON p.id = r.product_id '; $rsm = new ResultSetMapping; $rsm->addEntITyResult('AppBundle\Entity\Product','p'); $rsm->adDFieldResult('p','COUNT(id)','reviewsCount'); $query = $this->getEntityManager()->createNativeQuery($@R_419_2524@,$rsm); $results = $query->getResult();
然后在您的产品实体中,您将有一个$reviewsCount字段,计数将被映射到该字段.请注意,只有在Doctrine肉类数据中定义了一个列,这样才可以:
/** * @ORM\Column(tyPE="integer") */ private $reviewsCount; public function getReviewsCount() { return $this->reviewsCount; }
这是Aggregate Fields学说文件的建议.问题在于,您本质上使Doctrine认为您在数据库中有另一列,名为reviews_count,这是您不想要的.所以,这仍然可以在没有实际添加该列的情况下工作,但是如果您运行了一个原则:schema:update将为您添加该列.不幸的是,Doctrine真的不允许虚拟属性,所以另一个解决方案是编写自己的定制hydrator,或者可能订阅loadClassMetadata事件,并在您的特定实体(或实体)加载之后自己手动添加映射.
请注意,如果您执行类似COUNT(r.id)AS reviewsCount的操作,那么您不能再在addFieldResult()函数中使用COUNT(id),并且必须使用该第二个参数的别名reviewsCount.
您还可以使用ResultSetMappingBuilder
作为开始使用结果集映射.
我的实际建议是手动执行,而不是通过所有额外的东西.基本上创建一个常规查询,将您的实体和标量结果返回到数组中,然后将标量结果设置为实体上相应的未映射字段,并返回实体.
以上是脚本宝典为你收集整理的php – 可以使用SQL函数的结果作为Doctrine中的一个字段吗?全部内容,希望文章能够帮你解决php – 可以使用SQL函数的结果作为Doctrine中的一个字段吗?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。