Doctrine - 我正在获取Entity类而不是Repository类

时间:2016-04-22 07:25:49

标签: doctrine-orm entity

我创建了实体管理器的实例

$this->em = Connection::MainMySql()->GetEntityManager();   

经过一些查询后,我尝试从Repository类中获取对象。

$usersArray = $this->em->createQueryBuilder()
                        ->select("us")
                        ->from('Model\Repo\mytables\User', "us")
                        ->where("us.idUser = :idUser")
                        ->setParameter("idUser", $idUser)
                        ->getQuery()
                        ->execute();

为什么我会在(?)部分指定所需的类之后获取Model \ Entity \ mytables \ User类的对象列表而不是Model \ Repo \ mytables \ User?

1 个答案:

答案 0 :(得分:2)

实际上,存储库不能用作数据库条目的表示 换句话说,存储库应包含检索/创建/更新/删除由实体表示的数据库条目的方法。

这就是为什么EntityManager被称为实体管理器,它管理实体而不是存储库类。

例如,你可以完美地做到:

// Return an instance of the Repository Model\Repo\mytables\User
$repository = $this->em->getRepository('Model\Entity\mytables\User');

// The repository is used to create the QueryBuilder, so the from statement is already filled by doctrine as model\Entity\mytables\User
$query = $repository->createQueryBuilder('u')
// ...

这也是你可以这样做的原因:

$repository = $this->em->getRepository('Model\Entity\mytables\User');
// Return all entries of the 'users' table as Model\Entity\mytables\User instances
$users = $repository->findAll();

我很惊讶您的查询的from声明不会产生错误,例如"模型\实体\ mytables \用户不是有效实体"。

此外,您的结构看起来很混乱,您必须从实体中正确区分存储库(模型),以便根据各自的角色使用它们。