Php doctrine GeneratedValue=NONE保持为Id插入NULL
这是我的实体:Php doctrine GeneratedValue=NONE保持为Id插入NULL,php,mysql,doctrine-orm,doctrine,symfony,Php,Mysql,Doctrine Orm,Doctrine,Symfony,这是我的实体: class Foo { /** * @var int * @ORM\Id * @ORM\Column(name="custom_id", type="integer") * @ORM\GeneratedValue(strategy="NONE") */ private $customId; public function __construct( $customId ) { $th
class Foo
{
/**
* @var int
* @ORM\Id
* @ORM\Column(name="custom_id", type="integer")
* @ORM\GeneratedValue(strategy="NONE")
*/
private $customId;
public function __construct( $customId )
{
$this->customId = $customId;
}
}
现在我正在生成一个新实例
$foo = new Foo(123);
dump($foo); // shows customId: 123
$em->persist($foo);
$em->flush();
$em->clear();
执行“插入到表中”时发生异常
(自定义_id,foo,bar)值(?,?)'和参数[null,null,
空]:
SQLSTATE[23000]:完整性约束冲突:1048列
“自定义\u id”不能为空
我知道它不能为空,这就是我设置它的原因。
为什么条令用NULL覆盖该值?策略是无的,并且发生在构造器中。。。我错过了什么 删除
@ORM\GeneratedValue(strategy="NONE")
有点晚了,但万一有人要搜索它,您需要使用自定义值生成器(不做任何事情,只需将您的插入语句)
NONE意味着:将其设为null。删除生成的@ORM\r。。。行完整。“无:告诉Doctrine标识符是由您的代码分配(并由此生成的)。分配必须在新实体传递给EntityManager#persist之前进行。无与完全删除@GeneratedValue相同。”我确实删除了它,结果是一样的“无:告诉条令标识符是由您的代码分配(并由此生成)的。分配必须在将新实体传递给EntityManager#persist之前进行。没有一个和完全去掉@GeneratedValue是一样的
/**
* @var int
* @ORM\Id
* @ORM\Column(name="custom_id", type="integer")
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Doctrine\ORM\Id\AssignedGenerator")
*/
private $customId;