PHP Doctrine - 加载相关记录

时间:2009-10-01 07:33:20

标签: php doctrine

使用Doctrine PHP

如果我的用户与模型地址有多对多的关系,并且每个地址都有一个地址类型的外键(家庭,办公室)。 Doctrine不会自动加载该地址类型的相关记录。

$user = Doctrine::getTable('User')->findOneById(1); // bob
echo $user->Address[0]->address_type_id; // 4
echo isset($user->Address[0]->AddressType); // false
$user->Address[0]->refreshRelated(); // or $user->Address[0]->loadReference('AddressType');
echo isset($user->Address[0]->AddressType); // true
echo $user->Address[0]->AddressType->name; // office

不确定这是否是教条或我的模型中的错误。

但这是将相关模型加载到一个深度以上的最佳方法,还是有另一种方法可以实现相同的结果?

2 个答案:

答案 0 :(得分:3)

您是否只是尝试逐个加入您的关系? 如果关系设置正确,效果会非常好。

$user = Doctrine::getTable('User')
  ->createQuery('u')
  ->leftJoin('u.Address a')
  ->leftJoin('a.AddressType t')
  ->findOneById(1);

与示例相比,您还可以节省db 2 sql查询。

答案 1 :(得分:2)

你是说你不能这样做:

echo $user->Address[0]->AddressType->name;

如果你在没有isset的情况下尝试,那么在自动为你检索之前,Doctrine应检查是否已设置该值。