学说2:如何自动获取相关表的数据?

时间:2016-06-22 05:49:09

标签: php mysql doctrine-orm doctrine

我得到了这样的模型:

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
}

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获取数据时:

    $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();

在结果中,我获得了用户的所有价值(包括其地址的价值)。 当我评论$adr=$this->model->address->getAll();

我会收到错误:

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

我意识到Doctrine只在我加载所有需要的数据时进行映射。

这是我的问题: 如何使doctrine自动获取其关系表中的数据只有一个查询???我真的根本不想使用查询构建器。

请提前感谢。

1 个答案:

答案 0 :(得分:1)

如果我理解你,你需要获取方法EAGER

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

这样每当您要求User时,您都会检索Address实体