我可以设置一个简单的默认值,如字符串或布尔值,但我找不到如何为实体设置defualt.
在我的User.php实体中:
/** * @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\Foo") */ protected $foo;
在构造函数中,我需要为$ foo设置一个默认值:
public function __construct() { parent::__construct(); $this->foo = 1; // set id to 1 }
期望一个Foo对象,它传递一个整数.
设置默认实体ID的正确方法是什么?
我认为你最好将它设置在一个PrePersist
事件中.
在User.php
:
use Doctrine\ORM\Mapping as ORM; /** * .. * @ORM\HasLifecycleCallbacks */ class User { /** * @ORM\PrePersist() */ public function setInitialFoo() { //Setting initial $foo value } }
但是设置关系值不是通过设置整数来执行的id
,而是通过添加实例来执行Foo
.这可以在事件监听器内完成,而不是实体的LifecycleCallback
事件(因为你必须调用Foo
实体的存储库).
首先,在捆绑services.yml
文件中注册事件:
services: user.listener: class: Tsk\TestBundle\EventListener\FooSetter tags: - { name: doctrine.event_listener, event: prePersist }
和FooSetter
班级:
namespace Tsk\TestBundle\EventListener\FooSetter; use Doctrine\ORM\Event\LifecycleEventArgs; use Tsk\TestBundle\Entity\User; class FooSetter { public function prePersist(LifecycleEventArgs $args) { $entity = $args->getEntity(); $entityManager = $args->getEntityManager(); if ($entity instanceof User) { $foo = $entityManager->getRepository("TskTestBundle:Foo")->find(1); $entity->addFoo($foo); } } }