财产没有被冲洗

时间:2014-03-12 14:14:08

标签: symfony entitymanager

我在控制器中调用服务:

$this->getContainer()->get('pro_convocation')->sendDelegationEmails();

这是使用服务执行的方法:

function sendDelegationEmails()
{
    foreach ($this->getRepository()->findWithPendingDelegationsEmail(1) as $convocation) {
        if (! $convocation->delegationsEmailCanBeSent()) continue;
        $this->sendDelegationsEmails($convocation);
        $convocation->_setDelegationsEmailIsSent();  //<--- it is not saved
        $this->save($convocation);
    }
}

和其他在同一类中使用的方法:

/**
 * @return \Pro\ConvocationBundle\Entity\ConvocationRepository
 */
private function getRepository()
{
    return $this->get('doctrine')->getRepository('ProConvocationBundle:Convocation');
}

function save(ConvocationEntity $convocation)
{
    $this->getEntityManager()->persist($convocation);
    $this->getEntityManager()->flush();
}

function sendDefinitiveMinute(ConvocationEntity $convocation)
{
    foreach ($convocation->getCommunity()->getMembers() as $user) {
        $this->get('pro.notifications')->send(Notification::create()
            ...
            ->setBody($this->get('templating')->render(
                'ProConvocationBundle:Convocation:definitive-minute.html.twig',
                array(
                    'convocation' => $convocation,
                    'convocationIsOrdinary' => $this->get('pro_convocation.ordinariness')->isOrdinary($convocation),
                    'user' => $user
                )
            ))
        );
    }

}

编辑: send方法:

function send(Notification $notification)
{
    if (! $notification->getRecipient()) throw new \Exception("Recipient not set");

    if (! $notification->getRecipient()->getEmail()) {
        $this->logger->info(sprintf(
            "Notification \"%s\" ignored as recipient %s has no email",
            $notification->getSubject(), $notification->getRecipient()));

        return;
    }

    // Ignore notifications to the own author
    if ($notification->getAuthor() === $notification->getRecipient()) {
        $this->logger->info(sprintf(
            "Notification ignored as recipient is the author (%s)",
            $notification->getRecipient()));

        return;
    }

    $em = $this->doctrine->getManager();
    $em->persist($notification);
    $em->flush();

    if ($this->notificationHasToBeMailed($notification)) {
        $this->mail($notification);
        $this->logger->info("Notification mailed to {$notification->getRecipient()}");
    }
}

结束编辑

_setDelegationsEmailIsSent实体中的delegationsEmailIsSent方法和Convocation属性:

/**
 * @ORM\Column(type="boolean", name="delegations_email_is_sent")
 * @Constraints\NotNull
 */
private $delegationsEmailIsSent = false;


/**
 * @internal
 * @see \Pro\ConvocationBundle\Convocation::sendDelegationsEmails()
 */
function _setDelegationsEmailIsSent()
{
    $this->delegationsEmailIsSent = true;
}

问题是在控制器中执行delegations_email_is_sent方法时,数据库中的sendDelegationEmails没有变为true。我没有成功地尝试过几次改变。它似乎与flush方法有关,但我找不到问题。

0 个答案:

没有答案