gpt4 book ai didi

php - $em->find(..) 和 $em->getRepository(..)->find(..) 的区别

转载 作者:行者123 更新时间:2023-12-04 02:19:46 27 4
gpt4 key购买 nike

有实体

/**
* @ORM\Entity(repositoryClass="Some\Namspace\CustomRepository")
* @ORM\Table(name="image_type")
*/
class MyEntity{...}

CustomRepository 扩展了 EntityRepository 以覆盖一些方法,如 findfindAll

文档说:

// $em instanceof EntityManager
$user = $em->find('MyProject\Domain\User', $id);

Essentially, EntityManager#find() is just a shortcut for the following:

$user = $em->getRepository('MyProject\Domain\User')->find($id);

link:doctrine-orm.readthedocs.org

但是我的 CustomRepository 只适用于 $em->getRepository('Entities\MyEntity')->find($id)

使用 $em->find('Entities\MyEntity',$id); 忽略我在 CustomRepository 中覆盖的方法


  • 这是一个错误吗?
  • 或者这些构造之间存在差异?
  • 如何在不覆盖 EntityManager 的情况下为我的实体覆盖 findfinAll... 方法?

编辑(1)

使用 Composer :

"require": {
"doctrine/orm": "~2.4"
},

查找代码:

public function find($entityName, $id, $lockMode = null, $lockVersion = null)
{
$class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\'));

if ( ! is_array($id)) {
if ($class->isIdentifierComposite) {
throw ORMInvalidArgumentException::invalidCompositeIdentifier();
}

$id = array($class->identifier[0] => $id);
}
........... other ~100 lines
}

最佳答案

在 doctrine 2.2 中,它似乎没有任何不同——实际上只是 getRepository()->find() 的传递/快捷方式

http://www.doctrine-project.org/api/orm/2.2/source-class-Doctrine.ORM.EntityManager.html#348

public function find($entityName, $identifier, $lockMode = LockMode::NONE, $lockVersion = null)
{
return $this->getRepository($entityName)->find($identifier, $lockMode, $lockVersion);
}

想法:

  • 什么版本的学说?
  • 您是否有机会定制 EntityManager?

关于php - $em->find(..) 和 $em->getRepository(..)->find(..) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407801/

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