在Doctrine实体中执行自定义查询

时间:2013-12-10 20:11:15

标签: php symfony doctrine-orm

我有一个实体(B)负责管理自定义模板。在更新实体A时,我需要查询实体B以获取所需的模板并进行必要的处理。

类似的东西:

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\EntityRepository;
use Bundle\EmailsBundle\Entity\Email;

use Symfony\Component\Validator\ExecutionContextInterface;

class MemberApplication extends EntityRepository
{

    public function sendUpdateNotificationEmails()
    {
        // Send email to user
        $emailRow = $this->getEntityManager()
            ->createQuery("SELECT * FROM emails where `type` = 'x' LIMIT 1")
            ->getResult();        
    }


    (...)
}

这会给我一个错误:

Fatal error: Call to a member function createQuery() on a non-object in Classpath/Classname.php

$ this-> getEntityManager()和$ this-> _em都是NULL。

我在http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes中阅读了类似的方法,而且我无法弄清楚为什么这不起作用。

由于

1 个答案:

答案 0 :(得分:1)

this-> getEntityManager()返回null,因为没有注入对doctrine的依赖。试试$ this-> getDoctrine() - > getEntityManager();代替。这应该在控制器端完成,但是这样的事情:

$em = $this->getDoctrine()->getManager();
$memberRepo = $em->getRepository('MyBundle:MemberApplication');
$result = $memberRepo->sendUpdateNotificationEmails();

然后在你的函数中你应该返回$ emailRow或你想要的东西。