Php 如何为exsting实体的多通字段设置默认值
我正在尝试将一个manytone列添加到一个已经存在的表中,其中包含行。 我希望它是Php 如何为exsting实体的多通字段设置默认值,php,symfony,doctrine,Php,Symfony,Doctrine,我正在尝试将一个manytone列添加到一个已经存在的表中,其中包含行。 我希望它是nullable=false 因为它不可为null,所以我尝试设置一个默认值,但没有选项可以这样做。 如果我没有设置默认值,shema更新将崩溃,并且无法创建外键,因为我创建的表中没有id为0的行 外键引用的表的代码: <?php namespace MyBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Valid
nullable=false
因为它不可为null,所以我尝试设置一个默认值,但没有选项可以这样做。
如果我没有设置默认值,shema更新将崩溃,并且无法创建外键,因为我创建的表中没有id为0的行
外键引用的表的代码:
<?php
namespace MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints;
/**
* @ORM\Table(name="authority")
* @ORM\Entity()
*/
class Authority
{
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @Constraints\NotBlank(message="name cannot be blank.")
* @ORM\Column(type="string")
*/
protected $name;
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime", nullable=true)
*/
protected $createdAt;
/**
* Authority constructor.
*/
public function __construct()
{
$this->createdAt = new \DateTime();
}
}
/**
* @var Authority
* @ORM\ManyToOne(targetEntity="MyBundle\Entity\authority", cascade={"persist"})
* @ORM\JoinColumn(referencedColumnName="id", nullable=false)
*/
protected $authority;
我试过:
protected $authority = 1;
或
或
我不想手动更改数据库。/**
*@var权限
*@ORM\ManyToOne(targetEntity=“MyBundle\Entity\authority”,cascade={“persist”})
*@ORM\JoinColumn(referencedColumnName=“id”,nullable=false,columnDefinition=“INT DEFAULT 1”)
*/
受保护的权力;
这在自动生成的迁移类中起到了作用。/**
*@var权限
*@ORM\ManyToOne(targetEntity=“MyBundle\Entity\authority”,cascade={“persist”})
*@ORM\JoinColumn(referencedColumnName=“id”,nullable=false,columnDefinition=“INT DEFAULT 1”)
*/
受保护的权力;
这在自动生成的迁移类中起作用。可能重复的
$This->authority
只能设置为对象。无论如何,您必须获取实际实体,并在持久化之前将其包含在实体的$authority
属性中<代码>$this->authority=AuthorityRepository->find(1)代码>我理解,但是如果我没有设置默认值,我就无法运行“数据库:架构:更新”,当它尝试应用外键时会出现错误,因为列不为null。创建列时,它被设置为0,并且我没有id为0的权限。或者,您可以使用,但这仍然需要EntityManager的实例<代码>$this->authority=$em->getReference('authority',1)代码>我的建议是使用一些方法来设置默认值,可以在_构造函数、PrePersist处理程序或PrePersist事件侦听器中,将该值设置为对象的acual实例或该对象的引用代理。最终,除了完全绕过原则之外,没有任何方法可以直接修改关系字段的id列。相反,将实体的$authority
属性设置为整个authority(id=1)
对象。只能将$this->authority
的可能副本设置为对象。无论如何,您必须获取实际实体,并在持久化之前将其包含在实体的$authority
属性中<代码>$this->authority=AuthorityRepository->find(1)代码>我理解,但是如果我没有设置默认值,我就无法运行“数据库:架构:更新”,当它尝试应用外键时会出现错误,因为列不为null。创建列时,它被设置为0,并且我没有id为0的权限。或者,您可以使用,但这仍然需要EntityManager的实例<代码>$this->authority=$em->getReference('authority',1)代码>我的建议是使用一些方法来设置默认值,可以在_构造函数、PrePersist处理程序或PrePersist事件侦听器中,将该值设置为对象的acual实例或该对象的引用代理。最终,除了完全绕过原则之外,没有任何方法可以直接修改关系字段的id列。相反,将实体的$authority
属性设置为整个权限(id=1)
对象。
* @ORM\JoinColumn(referencedColumnName="id", nullable=false, default=1)
public function __construct()
{
$this->authority = 1;
}