Symfony 3原则组合键:不允许在实体的组合主键上使用单个id


Symfony 3 Doctrine Composite Key: single id is not allowed on composite primary key in entity

我有一个带有

的实体

integer column (compositeId)

字符串列

我希望这两列工作作为一个复合键。所以我在文档中查看这里:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

但是当我尝试加载存储库

$myEntity = $em->getRepository(MyEntity::class);

我得到了这个错误信息:

不允许在实体的复合主键上使用单个idAppBundle '实体' MyEntity

这是我的实体:

<?php
namespace AppBundle'Entity;

use Doctrine'ORM'Mapping as ORM;
/**
 * @Entity(repositoryClass="AppBundle'Repository'MyEntityRepository")
 * @Table(name="my_entity")
 */
class MyEntity {
    /**
     * @Column(type="integer")
     * @GeneratedValue()
     */
    protected $id;
    /**
     * @var integer
     * @Id
     * @Column(type="integer", name="composite_id")
     */
    protected $compositeId;
    /**
     * @var string
     * @Id
     * @Column(type="string", name="asin")
     */
    protected $asin;
    /**
     * @var string
     * @Column(type="string", name="sku")
     */
    protected $sku;
    /**
     * @var string
     * @Column(type="string", name="ean")
     */
    protected $ean;
    /**
     * @codeCoverageIgnore
     * @return mixed
     */
    public function getId() {
        return $this->id;
    }
    /**
     * @param mixed $id
     *
     * @return MyEntity;
     */
    public function setId($id) {
        $this->id = $id;
        return $this;
    }
    /**
     * @codeCoverageIgnore
     * @return int
     */
    public function getCompositeId() {
        return $this->compositeId;
    }
    /**
     * @param int $compositeId
     *
     * @return MyEntity;
     */
    public function setCompositeId($compositeId) {
        $this->compositeId = $compositeId;
        return $this;
    }
    /**
     * @codeCoverageIgnore
     * @return string
     */
    public function getAsin() {
        return $this->asin;
    }
    /**
     * @param string $asin
     *
     * @return MyEntity;
     */
    public function setAsin($asin) {
        $this->asin = $asin;
        return $this;
    }
    /**
     * @codeCoverageIgnore
     * @return string
     */
    public function getSku() {
        return $this->sku;
    }
    /**
     * @param string $sku
     *
     * @return MyEntity;
     */
    public function setSku($sku) {
        $this->sku = $sku;
        return $this;
    }
    /**
     * @codeCoverageIgnore
     * @return string
     */
    public function getEan() {
        return $this->ean;
    }
    /**
     * @param string $ean
     *
     * @return MyEntity;
     */
    public function setEan($ean) {
        $this->ean = $ean;
        return $this;
    }
}

我做错了什么?当我删除@generatedValue在我的ID表它工作。但我需要自动生成的值在我的ID列。我没有任何@Id注释在我的ID列,只有@generatedValue,在我的两个@Id列我没有任何注释与@generatedValue,但我得到了这个错误…

Doctrine在@Id字段上只支持@GeneratedValue()

该注释是可选的,只有在与@Id结合使用时才有意义。

https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html annref_generatedvalue

您可以使用columnDefinition作为解决方案,例如

@ORM'Column(type="integer", name="id", columnDefinition="INT AUTO_INCREMENT")

此处建议:https://stackoverflow.com/a/34749619/380054

您需要删除属性描述中除了受保护的$id之外的所有@Id