原则 - 我得到的是实体类而不是存储库类



我创建实体管理器的实例

$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\用户不是有效实体"之类的错误。

此外,您的结构看起来令人困惑,您必须正确区分存储库(模型)和实体,以便根据它们各自的角色使用它们。

相关内容

  • 没有找到相关文章

最新更新