2009-10-01 76 views
2

使用PHP学说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 

不知道这是否是一个错误或不是在教条或我的模型。

但是,这是加载相关模型超出一个深度的最佳方式还是有另一种方法来实现相同的结果?

回答

3

你是否简单地尝试加入你的关系一个接一个? 工作得很好,如果你的关系设置正确。

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

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

2

你是说,你不能做到这一点:

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

如果你尝试,如果没有isset,学说应该检查该值自动检索为您之前设置。