如何在 Doctrine (Symfony 3) 实体中设置列位置

Posted

技术标签:

【中文标题】如何在 Doctrine (Symfony 3) 实体中设置列位置【英文标题】:How to set column position in Doctrine (Symfony 3) Entity 【发布时间】:2016-07-09 19:06:01 【问题描述】:

我有一个名为 Order 的实体,它与用户实体具有 OneToMany 关系。

/**
 * Class Order
 *
 * @ORM\Entity(repositoryClass="AppBundle\Repository\OrderRepository")
 * @ORM\Table(name="orders")
 *
 * Defines the properties of the Order entity to represent the orders.
 */
class Order

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var User $user
     *
     * @ORM\ManyToOne(
     *      targetEntity="User",
     *      inversedBy="orders"
     * )
     * @ORM\JoinColumn(
     *     name="user_id",
     *     referencedColumnName="id"
     * )
     */
    protected $user;

    // other columns ..

当我运行它时,它会在表的末尾创建一个 user_id 列。

是否可以在 ID 列之后创建此列?

我试过了:

 ..
 *
 * @ORM\ManyToOne(
 *      targetEntity="User",
 *      inversedBy="orders"
 * )
 * @ORM\JoinColumn(
 *     name="user_id",
 *     referencedColumnName="id"
 * )
 *
 * @Column(
 *     columnDefinition="INT NOT NULL AFTER `id`"
 * )

但我得到一个错误:

  [Doctrine\Common\Annotations\AnnotationException]
  [Semantical Error] The annotation "@Column" in property  AppBundle\Entity\Order::$user was never imported. Did you maybe forget to add a "use" statement for this annotation?

【问题讨论】:

【参考方案1】:

您忘记了 @Column 注释中的 ORM 命名空间,但这不会解决您的主要问题。只有将columnDefinition 应用到@ORM\JoinColumn 注释上,columnDefinition 才能做你想做的事。

【讨论】:

以上是关于如何在 Doctrine (Symfony 3) 实体中设置列位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony 2 / Doctrine 中启用 ENUM

如何在 Symfony 中添加 Doctrine 过滤器?

如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射

Symfony 3 - Doctrine 2 - 在 oneToMany 关系上的 orderBy 不起作用

如何在 symfony 中更新新版本的 Doctrine2 和 ORM?

Symfony 2.7 / 3 - Doctrine:您请求了一个不存在的服务“fos_user.doctrine_registry”