Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何为exsting实体的多通字段设置默认值_Php_Symfony_Doctrine - Fatal编程技术网

Php 如何为exsting实体的多通字段设置默认值

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

我正在尝试将一个manytone列添加到一个已经存在的表中,其中包含行。 我希望它是
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;
}