使用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
不确定这是否是教条或我的模型中的错误。
但这是将相关模型加载到一个深度以上的最佳方法,还是有另一种方法可以实现相同的结果?
答案 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应检查是否已设置该值。