如何从ORM数据库中获取一系列信息

如何从ORM数据库中获取一系列信息,orm,doctrine,zend-framework2,Orm,Doctrine,Zend Framework2,我最近开始使用ORM理论,我正在努力研究如何从数据库中获取一系列信息的整体概念 通常我会这样做: $sql = "SELECT * FROM Users"; $userArray = $this->db->fetchAll($sql); /** * Returns an array of User entities. */ public function getUsers() { return $this->em->getRepository('My\Ent

我最近开始使用ORM理论,我正在努力研究如何从数据库中获取一系列信息的整体概念

通常我会这样做:

$sql = "SELECT * FROM Users";
$userArray = $this->db->fetchAll($sql);
/**
 * Returns an array of User entities.
 */
public function getUsers()
{
    return $this->em->getRepository('My\Entity\User')->findAll();
}
我能够使用setter和getter使用我的实体更新信息。。。我完全不知道如何使用实体从数据库中获取信息

这就是我所拥有的:

控制器:

   public function usersAction() {
   $userFunctions = new UserFunction;
   $userArray = $userFunctions->getUsers();
   $viewModel = new ViewModel(array('users' => $userArray));
   return $viewModel;
用户功能:

<?php

namespace Administration\Model;

use Doctrine\ORM\EntityManagerInterface;
use Zend\Paginator\Paginator;
use Zend\ServiceManager\ServiceManager;

class UserFunction
{
protected $entityManager;
protected $em;

function __constructor(EntityManagerInterface $entityManager) {
    $this->em = $entityManager;
}

public function getUsers()
{
    //Do some DB fetching magic and return user list in an array
    return array(1,2,3,4,5);
}

}

如果您能建议如何使用ORM原则获取数据,我们将不胜感激。

您的数据将作为实体数组返回:

您的getUsers方法可能如下所示:

$sql = "SELECT * FROM Users";
$userArray = $this->db->fetchAll($sql);
/**
 * Returns an array of User entities.
 */
public function getUsers()
{
    return $this->em->getRepository('My\Entity\User')->findAll();
}
该方法返回一个对象数组,特别是类\My\Entity\User的对象

在视图脚本中,可以执行以下操作:

<h1>All Users</h1>
<?php foreach($users as $u): ?>
<?= $u->getUsername(); ?><br/>
<?php endforeach; ?>
因此,当您询问如何使用Entite从数据库中获取信息时,您真正想要做的是使用EntityManager和/或EntityRepositories从数据库中获取实体

记住:实体本身并不知道数据库的持久性。但EntityManager和存储库确实如此


最后,基于这个问题,以及我回答的另一个问题,我建议您看看教义中的存储库。你似乎在某种程度上重新发明了那个轮子。

谢谢你的回答。当我添加该行时,我得到以下错误:致命错误:调用受保护的条令\ORM\EntityManager::\uu构造。在我看来,当我将鼠标悬停在getRepository方法上时,它会抛出以下错误:在类引用的方法中找不到方法getRepository,在主题类中找不到方法。知道这是什么或为什么被抛出。。。已经为此挣扎了几个小时了:这可能是因为你实际上没有注射你的entitymanager。您的构造函数没有运行,因为它应该是名称_construct,而不是_constructor.Ahh ok新错误:可捕获致命错误:传递给Administration\Model\UserFunction的参数1::_construct必须是条令\ORM\EntityManager的实例,未给出任何。。。EM真的让我困惑…我不认为EM真的让你困惑。没那么复杂。我想让你绊倒的是服务经理。发生新错误是因为创建UserFunction类的任何代码都没有传入EntityManager。你在使用DoctrineORMModule吗?是的,你是对的,我添加了:$em=$this->getServiceLocator->get'doctor\ORM\EntityManager'$userFunctions=newuserfunction$em;这似乎有效。谢谢