[英]Doctrine migration ignores @Table Annotation in @Entity definition
我在 Symfony 4.2 中有以下 Doctrine 實體:
當我運行遷移時,不會生成唯一約束和索引。 Entity 的結果只是 MySql 中的以下索引:
<?php
// src/Entity/Media.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\UniqueConstraint;
/**
* Common\Model\Entity\Media
*
* @Entity
* @Table(name="media",
* uniqueConstraints={
* @UniqueConstraint(name="virtual_unique",
* columns={"virtualname", "virtualfolder"})
* }
* indexes={
* @Index(name="idx_virtual", columns={"virtualname", "virtualfolder"})
* @Index(name="idx_identifier", columns={"identifier"})
* }
* )
*/
/**
* @ORM\Entity(repositoryClass="App\Repository\MediaRepository")
*/
class Media
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", nullable=true, options={"unique": true})
*/
private $identifier;
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
private $virtualname;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $virtualfolder;
}
可能您需要將@Table
更改為@ORM\\Table
並刪除@Entity
嘗試這個:
/**
* @ORM\Entity(repositoryClass="App\Repository\MediaRepository")
* @ORM\Table(name="media",
* uniqueConstraints={
* @UniqueConstraint(name="virtual_unique",
* columns={"virtualname", "virtualfolder"})
* }
* indexes={
* @ORM\Index(name="idx_virtual", columns={"virtualname", "virtualfolder"})
* @ORM\Index(name="idx_identifier", columns={"identifier"})
* }
* )
*/
首先,同一個類有多個注釋塊。 只需合並它們並為該實體提供一個注釋塊。
並且您直接使用了多個注釋,但沒有導入它們的定義。 具體來說:
@Entity
@Index
@UniqueConstraint
@Table
要么你:
@ORM
為前綴(因為您正在use Doctrine\\ORM\\Mapping as ORM
)這是最方便的,也是最常用的。
一個完整的修復:
/**
* Common\Model\Entity\Media
*
* @ORM\Entity(repositoryClass="App\Repository\MediaRepository")
* @ORM\Table(name="media",
* uniqueConstraints={
* @ORM\UniqueConstraint(name="virtual_unique",
* columns={"virtualname", "virtualfolder"})
* },
* indexes={
* @ORM\Index(name="idx_virtual", columns={"virtualname", "virtualfolder"}),
* @ORM\Index(name="idx_identifier", columns={"identifier"})
* }
* )
*/
class Media
{}
您還可以使用具有完整命名空間的注釋,例如@Doctrine\\ORM\\Mapping\\Table
、 @Doctrine\\ORM\\Mapping\\UniqueConstraint
等; 但這很快就會變得不必要地冗長。
use Doctrine\ORM\Mapping\Table;
use Doctrine\ORM\Mapping\Index;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\UniqueConstraint;
但這似乎也很浪費。
您將在文檔中看到的方法是第一個。 將Doctrine\\ORM\\Mapping
導入為ORM
,並使用懸掛在那里的注釋。
我嘗試了其他一些建議,但是在cache:clear
我在遷移中獲得了索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.