我创建了实体管理器的实例
$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?
答案 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 \用户不是有效实体"。
此外,您的结构看起来很混乱,您必须从实体中正确区分存储库(模型),以便根据各自的角色使用它们。