Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 坚持一对一强制关系问题的符号主义_Php_Sql_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 坚持一对一强制关系问题的符号主义

Php 坚持一对一强制关系问题的符号主义,php,sql,symfony,doctrine-orm,doctrine,Php,Sql,Symfony,Doctrine Orm,Doctrine,我在尝试持久化具有强制一对一关系的实体时遇到了一些问题,我得到了一条消息:SQLSTATE[23000]:完整性约束冲突:1048列“deliveryMode\u id”不能为null 因此,我有一个商店实体: class Shop{ ... /** * @ORM\OneToOne(targetEntity="acme\Bundle\DeliveryBundle\Entity\DeliveryMode", cascade={"all"}, orphanRemoval=

我在尝试持久化具有强制一对一关系的实体时遇到了一些问题,我得到了一条消息:SQLSTATE[23000]:完整性约束冲突:1048列“deliveryMode\u id”不能为null

因此,我有一个商店实体:

class Shop{

    ...

    /**
    * @ORM\OneToOne(targetEntity="acme\Bundle\DeliveryBundle\Entity\DeliveryMode", cascade={"all"}, orphanRemoval=true)
    * @ORM\JoinColumn(nullable=false)
    * @Assert\Valid
    */
    private $deliveryMode;
    ...
}
我还有一个DeliveryMode实体,它与商店实体没有任何链接(这不是双向关系)

我有与Shop和DeliveryMode关联的工作表单类型(deliveryModeFormType嵌套在Shop中)

当我尝试(验证操作成功后)执行

我有上面提到的错误

我试图改变 nullable=false 到 nullable=true

而且,它可以很好地坚持正确的交付模式附加到商店,当然还有商店

所以我认为这证明了一切都是正确的,这是否是第2.4.4条的一个可能的缺陷?实际上,商店的SQL插入似乎是在deliveryMode插入之前完成的,因此SQL引发了一个异常,因为我们在商店deliveryMode上有一个不可为null的属性。 一旦不可为空的限制被删除,问题就消失了,奇怪的事情,谢谢你的帮助


编辑:当将数据库操作放入条令事务中时,这是完美的,我认为有一种优先级管理通过条令ORM失败,应该在商店前插入DeliveryMode,而不是这样的情况

我没有看到任何错误。尝试在执行过程中的不同点转储
$deliveryMode
,并确保正确处理。例如,您可以在
类型中为
FormEvents::POST_set_DATA
等设置侦听器。顺便说一句,您可能希望尝试轻松转储。感谢FyodorX的帮助,Ladybug是一个很棒的工具!在执行以下操作时:瓢虫转储模具($shop->getDeliveryMode());就在刷新之前,一切正常,但是我仍然有我在发布
Shop
setDeliveryMode()
?当然:
public function setDeliveryMode(DeliveryMode$DeliveryMode){$this->DeliveryMode=$DeliveryMode;返回$this;}
$entityManager->persist($new_shop);