如何在Sylius中覆盖产品模型?

时间:2018-11-10 12:03:37

标签: symfony sylius

我正在研究Sylius 1.2.8。我已经覆盖了产品模型,并且可以正常工作,但是当我添加具有以下属性的新产品时:

<?php
...

$em = $this->container->get('sylius.manager.product');

/**
* @var \Sylius\Component\Product\Model\ProductAttributeValueInterface $attribute
* @var \Sylius\Component\Core\Model\ProductInterface $product 
*/

$product->addAttribute($attribute);
$em->persist($product);
$em->flush();

它抛出此错误:

  

执行“ INSERT INTO”时发生异常   sylius_product_attribute_value(语言代码,文本值,   布尔值,整数值,浮点值,日期时间值,日期值,   json_value,product_id,attribute_id)值(?,?,?,?,?,?,?,?,   ?,?)'和params [“ en_US”,null,null,null,null,null,null,   “ [\” 013ea12a-1aff-4050-8107-20b53ada73ce \“]”,为空,28]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'product_id' cannot be null

我的自定义产品模型如下:

namespace AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Sylius\Component\Core\Model\Product as BaseProduct;

class Product extends BaseProduct implements ProductInterface
{
    public function __construct()
    {
        parent::__construct();
    }
}

我的配置文件:

sylius_product:
  driver: doctrine/orm
  resources:
    product:
      classes:
        repository: AppBundle\Doctrine\ORM\ProductRepository
        model: AppBundle\Entity\Product

我发现了一个类似的问题:stackoverflow.com/q/22919004/6248367。但这并不能解决我的问题,也无法回答应用程序失败的原因。这个答案也是4岁。有人可以帮我解决这个问题吗?

编辑:每当我创建新产品并同时向其添加属性时,也会在admin中引发此错误。解决方法是先创建产品,然后添加属性。

1 个答案:

答案 0 :(得分:0)

我已经解决了问题。正如@czende所述,请正确检查配置。

在我的情况下,我在覆盖subject时在attribute中设置了错误的类:

sylius_product:
  driver: doctrine/orm
  resources:
    product:
      classes:
        repository: AppBundle\Doctrine\ORM\ProductRepository
        model: AppBundle\Entity\Product

sylius_attribute:
  driver: doctrine/orm
  resources:
    product:
        # Make sure to provide the correct Product class in the subject.
      subject: AppBundle\Entity\Product 
      attribute:
        classes:
          model: AppBundle\Entity\ProductAttribute
          repository: AppBundle\Doctrine\ORM\ProductAttributeRepository

还要确保在映射配置中使用mappedSuperclass,而不是commentedMichał Marcinkowski来将entity用作#3997

AppBundle\Entity\ProductAttribute:
  type: mappedSuperclass
  table: sylius_product_attribute

编辑:要调试错误,请首先在symfony warnings中选中debug bar。它可以缩小搜索范围以查找错误。我还可以提示您配置文件中是否有问题。