Doctrine生命周期回调不会触发

时间:2018-03-21 09:46:51

标签: php laravel doctrine-orm

在我坚持下来后,我想为我的发票创建一个标识符。我在我的标识符中使用自动生成的ID,因此我必须使用一些postPersist回调来实现此目的。但是,我的postPersist回调不会被解雇。

这是我的AbstractInvoice实体:

<?php

namespace App\Invoice;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table("invoices")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="integer")
 * @ORM\DiscriminatorMap({
 *     "0"="Regular",
 *     "1"="Credit"
 * })
 */
abstract class AbstractInvoice
{
    /**
     * @ORM\Id()
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     * @var int
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     * @var string
     */
    protected $identifier;

    /**
     * @ORM\PostPersist
     */
    protected function onPersist(): void
    {
        $this->identifier = '1' . str_pad($this->id, 5, '0', STR_PAD_LEFT);
    }
}

这是我的常规发票实体:

<?php

namespace App\Invoice;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Regular extends AbstractInvoice
{
}

我在控制器中创建常规发票实体的实例:

<?php

namespace App;

use App\Invoice\Regular;

class Controller
{
    public function handle(InvoiceRepository $invoices)
    {
        $invoice = new Regular();
        $invoices->add($invoice);
    }
}

使用此存储库:

<?php

namespace App;

use App\Invoice\AbstractInvoice;
use Doctrine\ORM\EntityRepository;

class InvoiceRepository extends EntityRepository
{
    public function add(AbstractInvoice $invoice): void
    {
        $this->_em->persist($invoice);
        $this->flush();
    }
}

发票存储得很好,只有onPersist方法才会被解雇。我已经尝试在子类(Regular)中实现回调,切换到公共方法。那里没有成功。我错过了什么吗?

谢谢!

0 个答案:

没有答案