[英]Doctrine naming strategy is not mapping default values
我正在使用Symfony教義捆綁包,orm擴展名。 問題出在自動映射中。 它映射以原則映射定義的值,但不映射未在此文件中定義的結果。 Symfony:4.3,教義-ORM:2.6,MySQL
我嘗試使用不同的命名策略:下划線,默認。
實體示例類:
<?php
class example {
private $email;
private $lastName;
private $firstName;
}
?>
orm.xml:
<entity name="example" table="users">
<id name="id" column="id" type="integer">
<generator strategy="AUTO" />
</id>
<field name="lastName" column="last_name"/>
<field name="firstName" column="first_name"/>
</entity>
yaml:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
在示例實體中,我設置了lastName和firstName屬性,但未設置電子郵件。
naming_strategy
控制如何從映射的屬性名稱生成列名稱,但是它不會通過比較Entity及其對應的表來自動生成映射本身。 auto_mapping
只會自動加載您的定義。
由於您可以在實體中擁有不持久存儲到數據庫中的屬性,反之亦然,因此必須定義所有映射。 這樣做可以使學說跟蹤您的數據庫架構,並通過遷移功能以新的屬性/列更新您的數據庫。
如果您感到懶惰並且擁有現有數據庫,則還可以從中生成(或更新)您的實體。 在這種情況下,所有列都將映射到實體,然后您可以刪除對您不使用的那些字段。
如果要減少映射文件的詳細程度,則可以刪除column
屬性。 然后,Doctrine將根據指定的naming_strategy
自動生成列名稱。 您只需在它不同於Doctrine生成的內容時對其進行顯式設置。 例如,由於您正在使用underscore
策略,因此您只能說:
<field name="lastName"/>
<field name="firstName"/>
<field name="email"/>
這將導致您使用完全相同的映射。 然后,如果您需要使用其他名稱的字段,則可以通過指定column
覆蓋它。
<field name="address" column="home_address"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.