我得到了这样的模型:
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自动获取其关系表中的数据只有一个查询???我真的根本不想使用查询构建器。
请提前感谢。
答案 0 :(得分:1)
如果我理解你,你需要获取方法EAGER
/**
* @OneToOne(targetEntity="Address")
* @JoinColumn(name="id_address", referencedColumnName="id", fetch="EAGER")
*/
public $address
这样每当您要求User
时,您都会检索Address
实体