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)