如果字段为null -symfony 4,则删除以嵌入式形式编辑父母实体时删除子实体



我正在使用Symfony 4,并且有两个实体;产品和产品图像。我已经在两者之间建立了一个OneToone关系,并且将ProductImageType形式嵌入了我的ProductType形式中,因为一个产品具有一个图像。我以productType形式嵌入的字段是属于producttype实体的" url"。

如果我留下图像URL空白,则创建新产品时,所有这些都可以按预期工作,那么在ProductImage表中未创建记录。如果我提供了一个URL,则会创建记录。但是,如果我编辑具有图像URL的产品并删除图像URL,则会出现错误。我希望的是,相关的productimage实体将仅设置为在其URL字段上或更更好的是,相关的儿童productImage只会完全从数据库中删除。我收到的错误是:

Expected argument of type "string", "NULL" given at property path "url".

我不明白这是怎么发生的,因为允许productImage的URL字段无效。解决此问题的最佳方法是什么?任何帮助都非常感谢!

产品代码:

/**
 * @ORMOneToOne(targetEntity="AppEntityProductImage", mappedBy="product", cascade={"persist", "remove"})
 */
private $image;
public function getImage(): ?ProductImage
{
    return $this->image;
}
public function setImage(ProductImage $image): self
{
    $this->image = $image;
    if ($this !== $image->getProduct()) {
        $image->setProduct($this);
    }
    return $this;
}

productImage ccode:

/**
 * @ORMColumn(type="string", length=255, nullable=true)
 */
private $url;
/**
 * @ORMOneToOne(targetEntity="AppEntityProduct", inversedBy="image", cascade={"persist", "remove"})
 * @ORMJoinColumn(name="product_id", referencedColumnName="id")
 * @AssertType(type="AppEntityProduct")
 */
private $product;
public function getProduct(): ?Product
{
    return $this->product;
}
public function setProduct(Product $product): self
{
    $this->product = $product;
    return $this;
}

productImageType代码:

->add('url', TextType::class, [
    'label' => 'Image Url',
        'attr' => [
            'placeholder' => 'A url to the image of this Product.'
        ]
    ]);

产品类型代码:

->add('image', ProductImageType::class, [
    'required' => false,
])

productImage实体中的setUrl缺少'?'在"字符串"之前。

public function setUrl(?string $url): self
{
    $this->url = $url;
    return $this;
}

也许是productimage-> $ product的orphanremoval?;

/**
* @ORMOneToOne(targetEntity="...", orphanRemoval=true)
* @ORMJoinColumn(name="product_id", referencedColumnName="id")
* @AssertType(type="AppEntityProduct")
*/

private $product;

最新更新