我创建实体管理器的实例
$this->em = Connection::MainMySql()->GetEntityManager();
经过一些查询后,我尝试从存储库类中获取对象。
$usersArray = $this->em->createQueryBuilder()
->select("us")
->from('ModelRepomytablesUser', "us")
->where("us.idUser = :idUser")
->setParameter("idUser", $idUser)
->getQuery()
->execute();
为什么即使在 from(...) 部分中指定了所需的类之后,我也会获得类模型\实体\mytables\用户而不是模型\存储库\mytables\User 的对象列表?
事实上,存储库不能用作数据库条目的表示形式。
换句话说,存储库应包含检索/创建/更新/删除由实体表示的数据库条目的方法。
被称为实体管理器,它管理实体而不是存储库类。
例如,您可以完美地执行以下操作:
// Return an instance of the Repository ModelRepomytablesUser
$repository = $this->em->getRepository('ModelEntitymytablesUser');
// The repository is used to create the QueryBuilder, so the from statement is already filled by doctrine as modelEntitymytablesUser
$query = $repository->createQueryBuilder('u')
// ...
这也是为什么你可以做到:
$repository = $this->em->getRepository('ModelEntitymytablesUser');
// Return all entries of the 'users' table as ModelEntitymytablesUser instances
$users = $repository->findAll();
我很惊讶您的查询的from
语句不会产生诸如"模型\实体\mytables\用户不是有效实体"之类的错误。
此外,您的结构看起来令人困惑,您必须正确区分存储库(模型)和实体,以便根据它们各自的角色使用它们。