簡體   English   中英

教義命名策略未映射默認值

[英]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.

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