2011-10-27 29 views
1

私のmysqlデータベースでは、 "User"と "UserProfile"という2つのテーブルがあります。テーブル "UserProfile"には、 "user"テーブルの "id"カラムにリンクする 'user_id'という名前の外部キーカラムがあります。さて、私はdbテーブルからdoctrineを使ってすべてのエンティティクラスを生成していますが、作成された "UserProfile"クラスには "user"という名前のプロパティがあり、user_idという名前のプロパティは含まれていません。 それはいいですか? 、doctrineのプライマリ/外部キーの関係

$user_profile_repo = $this->em->getRepository("UserProfile"); 

$user_profile = $user_profile_repo->findOneBy(array("user_id"=>$id)); 

しかし、生成されたエンティティクラスとして「USER_ID」プロパティが含まれていません:user_idを与えられた今

、私は、ユーザーのプロファイルを検索したい場合は、私はこのような何かを書くために必要な上記のコードは動作しません。今私はを知る必要があります上記のコードを動作させるにはどうすればいいですか?ありがとうございます。

+0

あなたが列に名前を付け、必要があります協会。私はdocblockを使用します。 http://www.doctrine-project.org/docs/orm/2.0/ja/reference/association-mapping.htmlをチェックしてください。これは、ユーザープロファイルの列として定義する必要がある1対1の関係です。ユーザークラスでは、変数を追加して列なしで関連付けを定義することができます – galchen

+0

これは私がしたくないことです。実際には、クラスが自動的に生成されるので、クラスを編集したくありません。だから、私は再びクラスを生成する必要がある場合、私のすべての変更はなくなります。だから、いくつかの代替方法を探しています。私はいくつかあると信じています... – Rana

+0

あなたはする必要はありません。コメントを追加し、コマンドラインツールを使用してすべてを生成するだけです。私は例と答えを追加します – galchen

答えて

1

データベース内のテーブル/カラムの実際の名前はあまり重要ではありません。コメントに設定することができます。

それはこのようなものでなければなりません:あなたは、ユーザーに方法はGetProfileを取得する必要があり、ユーザーが列IDを持っている、とUSERPROFILEは一度生成

をUSER_IDた

/** 
* models\User 
* @Table(name="User") 
* @Entity 
*/ 
class User 
{ 
    /** 
    * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false) 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @Column(name="name", type="string", length=50, precision=0, scale=0, nullable=false, unique=false) 
    */ 
    private $name; 

    /** 
    * @OneToOne(targetEntity="models\UserProfile", mappedBy="user") 
    */ 
    private $profile; 
} 


/** 
* models\UserProfile 
* @Table(name="UserProfile") 
* @Entity 
*/ 
class UserProfile 
{ 
    /** 
    * @OneToOne(targetEntity="models\User", inversedBy("profile")) 
    * @JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $user; 
} 

この場合、( )とのUserProfileにあなたがのgetUser()

を取得する必要があり、それは5.7 oneToOne双方向に似ていますhttp://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html

+0

あなたの提案は私にこの問題を解決する手がかりを与えました。しかし、私は私のmysqlデータベース上で双方向プライマリ/ライトキーの制約(1対1にする)を設定することでそれを解決できました。そして、doctrineによってエンティティクラスを生成し、あなたが言及したプロパティを得ました。ご協力いただきありがとうございます。 :) – Rana

+0

お手伝いをしてうれしいです。私はまた、スキーマツールを使用して、mysqlテーブルを生成/更新します。すべての制約を作成する – galchen

関連する問題