Php 原则2通过*返回对象查找
是否可以将Php 原则2通过*返回对象查找,php,doctrine,doctrine-orm,Php,Doctrine,Doctrine Orm,是否可以将findBy*方法更改为使用实体而不是数组返回对象(我的自定义)?您最好在实体存储库中编写自定义函数。以下是我的肮脏、低技术的方法 您的findBy*在此: $entities = $em->getRepository($entclass)->findBy($entFilter, array('id' => 'DESC')); 我在这里的单行转换: $entitiesCollection= new \Doctrine\Common\Collections\Arr
findBy*
方法更改为使用实体而不是数组返回对象(我的自定义)?您最好在实体存储库中编写自定义函数。以下是我的肮脏、低技术的方法
您的findBy*在此:
$entities = $em->getRepository($entclass)->findBy($entFilter, array('id' => 'DESC'));
我在这里的单行转换:
$entitiesCollection= new \Doctrine\Common\Collections\ArrayCollection($entities);
然后我确认我可以使用那些方便的ArrayCollection方法,如last()、count()、contains()等
使用findOneBy而不是findBy。findOneBy作为对象返回
findBy*()
返回一组实体,实际上可能是一个\doctor\Common\Collections\ArrayCollection
对象。它如何返回集合以外的任何内容?如果您知道它是一个单一的实体,并且想要一个实体,请使用findOneBy()
。对不起,我把它描述错了。我想使用对象,因为我想有可以处理实体的方法。类似于$this->doctrine->findById(数组(1,2,3))->myCustomMehod()代码>->findBy(数组(1,2,3))
将匹配多达3个独立的实体,因此返回的对象必须是一个集合。如果您为ArrayCollection编写了一个扩展,它接受一个现有集合,然后将findBy()
调用的结果提供给构造函数,并对其调用您的方法。如果您创建了一个自定义存储库,那么您可以创建自己的方法,在一次移动中完成整个过程。这是明智的。非常感谢。我试过了,效果很好。但是,当我试图在引用(M:N)上调用myCustomMehod()
时,它不起作用。比如$this->doctrine->findOneById(1)->types->myCustomMehod()代码>(致命错误:调用未定义的方法条令\ORM\PersistentCollection::myCustomMethod()。是否有机会使其工作?findOneById()
应返回您正在使用的任何存储库的实体类型。如果您试图从实体中调用该方法,则该方法应该放在实体中。什么是->类型->
?
var_dump($entitiesCollection->count(), $entitiesCollection); print \strftime('%c') . __FILE__ . __LINE__ . __FUNCTION__; die;
$obj = $this
->getDoctrine()
->getRepository("VendorXXXBundle:EntityName")
->findOneBy(array $criteria)