对Doctrine 2中的存储库感到困惑

时间:2011-06-27 18:20:47

标签: php doctrine repository repository-pattern

我正在尝试在我的应用中实现存储库,以便将DQL与实体逻辑的其余部分分开但我得到了一个类'UserRepository' not found in /home/fiodorovich/public_html/tests/library/Doctrine/ORM/EntityManager.php on line 567例外。

这是我的用户类:

/**
 * Description of User
 * @Table(name="users")
 * @Entity(repositoryClass="UserRepository")
 * @author fiodorovich
 */

这是我创建的存储库:

namespace Federico\Entity\Repository;
use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function getAllUsers () {
        $users = $this->em->createQuery('SELECT u FROM Federico\Entity\User u JOIN u.countries')->getResult();
        return $users;
    }

    public function getUser ($id) {
        $query = $this->em->createQuery('SELECT u, c FROM Federico\Entity\User u JOIN u.countries c WHERE c.user = ?1');
        $query->setParameter(1, $id);
        $userModel = $query->getSingleResult();
        return $userModel;
    }
}

最后,这是我用来从控制器调用它的行:

 $this->em->getRepository('Federico\Entity\User')->getAllUsers();

任何帮助都会很酷,因为我真的想使用存储库

2 个答案:

答案 0 :(得分:3)

IIRC除非存储库和实体类都在同一个命名空间内,否则必须使用完全限定的命名空间名称,即:@Entity(repositoryClass="Federico\Entity\Repository\UserRepository")

答案 1 :(得分:1)

我认为你应该使用@Entity(repositoryClass="Repository\UserRepository") - 相对于实体 因为我假设您的存储库类位于Federico\Entity\Repository