在我坚持下来后,我想为我的发票创建一个标识符。我在我的标识符中使用自动生成的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)中实现回调,切换到公共方法。那里没有成功。我错过了什么吗?
谢谢!