2016-12-01 22 views
2

コマンドラインでdoctrineを使ってエンティティを生成しました。それは以下の通りである - データベースカラム名がCOUNTRY_IDで、SQL結果がASSOCを与えるにはdoctrine 2 symfonyでキャメルケースに表示するdoctrine生成カラム名を作成する方法は?

/** 
* @var string 
* 
* @ORM\Column(name="COUNTRY_ID", type="string", length=2) 
*/ 
private $cOUNTRYID; 

COUNTRY_IDをキーとし、その名前をvalueとします。

私の要件は、キャメルケースのSQL結果の表示名を持つことです。たとえばCOUNTRY_IDcountryIdである必要があります。これを行うには、doctrineファイルで利用可能な設定がありますか?

+0

あなたの質問にお答えできますか? –

+0

* SQL結果の名前を*表示するとどういう意味ですか? – Wilt

+0

大丈夫です。私はより詳細に説明します。私のエンティティ 'TFixed.php'とそれには以下のような内容があります。 '名前空間RestBundle \ Entity; ORMとしてDoctrine \ ORM \ Mappingを使用します。 /** * TFixedFees * * @ORMの\表() * @ORM \エンティティクラスは{ /** をTFixed */ (repositoryClass = "RestBundle \エンティティ\ TFixedRepository")* @var整数 * * @ORMの\列(名= "USER_ID"、タイプ= "整数") */ プライベート$ユーザーID; ' と私は任意のSQLクエリを実行するとき、その結果の配列は{'があります'USER_ID': '67637673'} '。しかし、私はラクダの場合に結果が必要でした。 –

答えて

3

camelCaseの自動生成列名を取得するには、explained in Doctrine documentationという命名方法を実装する必要があります。

あなたのカラム名、CamelCaseNamingStrategy.phpためにキャメルケースの名前を取得するには、クラスを作成します。

<?php 
class CamelCaseNamingStrategy implements NamingStrategy 
{ 
    public function classToTableName($className) 
    { 
     return 'cc_' . substr($className, strrpos($className, '\\') + 1); 
    } 
    public function propertyToColumnName($propertyName) 
    { 
     return $propertyName; 
    } 
    public function referenceColumnName() 
    { 
     return 'id'; 
    } 
    public function joinColumnName($propertyName, $className = null) 
    { 
     return strtolower($propertyName) . ucwords($this->referenceColumnName()); 
    } 
    public function joinTableName($sourceEntity, $targetEntity, $propertyName = null) 
    { 
     return strtolower($this->classToTableName($sourceEntity)) . ucwords($this->classToTableName($targetEntity)); 
    } 
    public function joinKeyColumnName($entityName, $referencedColumnName = null) 
    { 
     return strtolower($this->classToTableName($entityName)) . ($referencedColumnName ?: ucwords($this->referenceColumnName())); 
    } 
} 

次にサービスとして、この新しいクラスを登録し、あなたのconfig.ymlに追加します。

orm: 
    #... 
    entity_managers: 
     default 
      naming_strategy: my_bundle.camel_case_naming_strategy.default 
+0

私はOPが彼のエンティティ(プロパティ名)を既存のデータベースから生成すると思います。名前付け戦略で 'columnNameToProperty'のようなものを設定する可能性はありますか? – Wilt

+0

@ウィルトについてはわかりませんが、私はまだ最終的にcamelCaseの列名を取得することだと思います。あなたの質問のために、私はこれがトリックを行うだろうと思う:http://symfony.com/doc/current/doctrine/reverse_engineering.html(命名戦略の考え方を解くことなく)。 – Veve

0

あなたが表示された名前を持つクラスのプロパティ名を意味している場合、あなたはこのようにそれを行うことができますが:

/** 
* @var string 
* 
* @ORM\Column(name="COUNTRY_ID", type="string", length=2) 
*/ 
private $countryId; 

あなたの列定義でname="COUNTRY_ID"が(教義がテーブルにそれを見つけるために使用する列の名前です。テーブルの列名)。

プロパティ名$countryIdは、Doctrineがクエリの結果をバインドするために使用するプロパティの名前です。だからクラスのプロパティをラクダのケースにするには、ラクダのプロパティ名を宣言するだけです。

+0

ありがとうございます。しかし、プロパティ名はすべて自動的に生成され、キャメルケースでそれを生成するにはどのように設定するのですか? –

+0

@ManojKumarテーブル名 'COUNTRY_ID'を' country_id'に変更すると、あなたが望むようにラクダのケースになるでしょう。それは可能でしょうか、テーブル名を変更できませんか? – Wilt

+0

そうでなければ、[** Doctrineドキュメントの** NamingStrategyの実装**](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/namingstrategy.html)を読むことができますifあなたはそこに解決策を見つけることができます... – Wilt

関連する問題