簡體   English   中英

獲取學說以執行注釋更改

[英]Get Doctrine to act on an annotation change

我一直在Symfony應用程序中使用注釋來使用Doctrine定義ORM映射。

我想更改一個名為“ author”的現有字符串保留屬性,以使其現在代替對User實體的引用。 我從此更改屬性定義上方的注釋:

/**
 * @var string
 *
 * @ORM\Column(name="author", type="string", length=255)
 */

...對此:

/**
 * @var User
 *
 * @ORM\ManyToOne(targetEntity="FOS\UserBundle\Model\User", cascade={"all"})
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */

現在的問題是:當我運行doctrine:migrations:diff來生成遷移時,我收到一條消息,提示“在映射信息中未檢測到更改”。

同樣,當我運行doctrine:schema:update ,我收到一條消息,說“沒有什么要更新的-您的數據庫已經與當前實體元數據同步”。

===

更新:刪除數據庫並重新運行安裝后,運行doctrine:migrations:diff時,我現在得到以下錯誤消息:

[Doctrine \\ ORM \\ ORMException]從AppBundle \\ Entity \\ Post到FOS \\ UserBundle \\ Model \\ User的關系所引用的列名id不存在。

即使DESC users返回以下內容,也會出現這種情況:

mysql> DESC users;
+-----------------------+---------------+------+-----+---------+----------------+
| Field                 | Type          | Null | Key | Default | Extra          |
+-----------------------+---------------+------+-----+---------+----------------+
| id                    | int(11)       | NO   | PRI | NULL    | auto_increment |
| username              | varchar(180)  | NO   |     | NULL    |                |
...

...所以我比原來的地方要遠一些,但是我的基本問題仍然適用: 為了使Doctrine在本專欄上愉快地構建ManyToOne映射,仍需要什么信息或操作?

===

附加編輯:感謝goto的回答,我四處張望,看到我們的應用程序已經具有擴展FOS UserBundle實體的實體。 因此,我將注釋更改如下:

/**
 * @var User
 *
 * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", cascade={"all"})
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */

...一切正常。

您忘記了按照FOS用戶文檔中的描述創建自己的實體:

https://symfony.com/doc/current/bundles/FOSUserBundle/index.html#step-3-create-your-user-class

然后,您必須將其映射到您的實體

@ORM\ManyToOne(targetEntity="YourBundle\Entity\User", cascade={"all"})

暫無
暫無

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

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