2016-06-22 6 views
0

私はこのようにこれらのモデルを得た。その結果Doctrine 2:関連するテーブルのデータを自動取得する方法は?

$this->model = new stdclass; 
    $this->model->address = new AddressModel(); 
    $this->model->user = new UserModel(); 
    $adr=$this->model->address->getItem(1); 
    $user=$this->model->user->getItem(1); 
    var_dump($user);exit(); 

:私はこれらのコードでMySQLからデータを取得しようとすると

CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL, 
address_id INT DEFAULT NULL, 
PRIMARY KEY(id) 
) ENGINE = InnoDB; 

CREATE TABLE Address (
id INT AUTO_INCREMENT NOT NULL, 
PRIMARY KEY(id) 
) ENGINE = InnoDB; 

ALTER TABLE User ADD FOREIGN KEY (address_id) REFERENCES Address(id); 

ます。mysqlの

class Address{ 
    /** @id @Column(type="integer") @GeneratedValue**/ 
    public $id; 
    /** @name @Column(type="string")**/ 
    public $name; 
} 
class User{ 
    /** @id @Column(type="integer") @GeneratedValue**/ 
    public $id; 
    /** 
    * @OneToOne(targetEntity="Address") 
    * @JoinColumn(name="id_address", referencedColumnName="id") 
    */ 
    public $address 
} 

とスキーマ、私はユーザーのすべての価値を得た(そのアドレスの値を含む)。 私はエラーになるだろう$adr=$this->model->address->getAll();

をコメントした場合:

Warning: require(C:\WINDOWS\TEMP\__CG__Address.php) 

を、私は私が必要とするすべてのデータをロードする際にDoctrineにのみマッピングすることに気づきました。

ここに私の質問です: doctrineは、クエリだけの関係テーブルからデータを自動取得する方法は?私は本当にすべてのクエリビルダーを使用したくないです。

予めご了承ください。

答えて

1

私はあなたによく理解していれば、あなたはこの方法EAGER

/** 
* @OneToOne(targetEntity="Address") 
* @JoinColumn(name="id_address", referencedColumnName="id", fetch="EAGER") 
*/ 
    public $address 

をこのようにフェッチあなたはUserを頼むたびにあなたは、これがそれだそうAddressエンティティ

+0

を取得します必要があります。私はこれを一度したいです。それは私がプロガーミングが大好きです。あたかも私たちが海賊で宝を探しているかのように。どうもありがとう。 – Mirai

+0

'Address'エンティティの' id'だけで 'User'オブジェクトの' address'を更新できますか? – Mirai

+0

はい、可能ですが、プロパティ(idUser)とエンティティユーザーの関係をすべてのgetterがsetterであるエンティティに保持する必要があります。リレーションシップやIDを通じてエンティティを更新するときに起こりうる副作用を確認します。 –

関連する問題