Doctrine的JoinColumns无法正常工作

时间:2014-12-18 17:13:37

标签: php sql symfony doctrine-orm doctrine

我正在尝试让ManyToOne协会在学说中工作,但没有运气,这是我的关系代码:

// the entity : Product

/**
 * @Id
 * @ManyToOne(targetEntity="ProductsModule\Entity\Configuration", inversedBy="product")
 * @JoinColumns={@JoinColumn(name="id_type", referencedColumnName="id"),
 *               @JoinColumn(name="id_site", referencedColumnName="id")}
 */
private $configurations;

/**
 * @Id
 * @ManyToOne(targetEntity="ProductsModule\Entity\Picture", inversedBy="product")
 * @JoinColumn(name="id_picture", referencedColumnName="id")
 */
private $picture;

和关联的反转是:

// the entity : Configuration

/**
 * @OneToMany(targetEntity="ProductsModule\Entity\Product", mappedBy="configurations")
 */
private $product;

// the code in the controller
$product = new Product;
$product->setConfiguration($configuration); // the configuration object is retrieved from DB
$product->setPicture($picture);
$this->em->persist($product);
try
{
    $this->em->flush();
}
catch (\Exception $e)
{
    var_dump($e->getMessage());die();
}

问题是Doctrine尝试设置JoinColumn的第一列(在上面的示例中:id_type)但它忽略了第二列,这会引发以下错误:

An exception occurred while executing 'INSERT INTO tableX (id_picture, id_type) VALUES (?, ?)' with params [1, 1]:SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db`.`tableX`, CONSTRAINT `fk2` FOREIGN KEY (`id_site`) REFERENCES `sites` (`id`))

产品实体本身就是一个由ManyToMany关系诞生的实体(这就是为什么它有两个主键),我只是更改了实体的名称以保持代码私有,因为我不允许分享它。

谢谢。

1 个答案:

答案 0 :(得分:1)

您似乎拥有与网站属性相关的外键,尝试使用以下命令更新您的架构:

app/console doctrine:schema:update --force 

如果你遇到同样的错误,试着删除表或数据库,如果这不会产生任何问题,并确保导出数据库的sql文件并删除所有外键,导入数据然后重新执行命令: app / console doctrine:schema:update --force