簡體   English   中英

Symfony 3 Doctrine Composite Key:實體中的復合主鍵上不允許使用單個 id

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

我有一個實體

整數列(compositeId)

和一個

字符串列(asin)

我希望兩列都作為復合鍵工作。 所以我在文檔中查看:

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

但是當我嘗試加載我的存儲庫時

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

我收到此錯誤消息:

實體 AppBundle\Entity\MyEntity 中的復合主鍵上不允許使用單個 id

這是我的實體:

<?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;
    }
}

我究竟做錯了什么? 當我在我的 ID 表中刪除 @generatedValue 時,它​​可以工作。 但我需要在我的 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 ,除了 protected $id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM