【发布时间】:2025-12-14 08:10:01
【问题描述】:
我正在使用 symfony 2.3。我试图在每个月底为每个广告生成一张发票。为此,我实现了一个名为 InvoiceListener 的侦听器。问题是 updateInvoice() 函数没有将数据插入到发票表中。系统不会呈现错误。正确显示查询的教义调试器。
InvoiceListener.php
class InvoiceListener {
private $em;
public function __construct(\Doctrine\ORM\EntityManager $em) {
$this->em = $em;
}
public function process(GetResponseEvent $event) {
$expire = '2012-01-01';
$current_month = date("m");
$current_year = date("y");
if (date("d") == 1) {
echo 'first day';
$this->updateStatus($current_month, $current_year);
$this->updateInvoice();
} else {
echo 'not first day';
$users = $this->findByRole('ROLE_COMMERCIAL');
// update invoice
$this->updateInvoice($users);
}
}
public function updateStatus($current_month, $current_year) {
$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder
->update('Biginfo\UserBundle\Entity\User', 'u')
->set('u.nbrBusiness', 1)
->set('u.month', $current_month)
->set('u.year', $current_year);
return $queryBuilder->getQuery()->getResult();
}
public function updateInvoice($users) {
$queryBuilder = $this->em->createQueryBuilder();
foreach ($users as $user) {
$queryBuilder
->update('Biginfo\AdminBundle\Entity\Invoice', 'c')
->set('c.commercial', $user->getId())
->set('c.month', $user->getMonth())
->set('c.year', $user->getYear())
->set('c.nbrBusiness', $user->getNbrBusiness());
}
return $queryBuilder->getQuery()->getResult();
}
/**
* @param string $role
*
* @return array
*/
public function findByRole($role) {
$qb = $this->em->createQueryBuilder();
$qb->select('u')
->from('Biginfo\UserBundle\Entity\User', 'u')
->where('u.roles LIKE :roles')
->setParameter('roles', '%"' . $role . '"%');
return $qb->getQuery()->getResult();
}
}
【问题讨论】:
-
"...我正在尝试在每个月底为每个广告生成发票..." - 听起来您需要 Console Command 而不是用 cronjob 调用它。
-
我同意@BentCoder。对此使用监听器是一种矫枉过正的做法。
-
也同意@BentCoder,应该使用控制台
-
@BentCoder 你有关于 conjobs 的教程吗?我是新手。
标签: symfony doctrine-orm symfony-2.3