2

使用教义 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

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

但这是将相关模型加载到超过一个层次的最佳方法,还是有另一种方法可以达到相同的结果?

4

2 回答 2

3

您是否只是尝试过一一加入您的关系?如果您的关系设置正确,则效果很好。

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

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

于 2009-10-14T16:08:54.313 回答
2

你是说你不能这样做:

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

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

于 2009-11-06T03:08:50.973 回答