2

DoctrinePHPの使用

モデルアドレスと多対多の関係を持つユーザーがいて、各アドレスにアドレスタイプ(自宅、オフィス)への外部キーがある場合。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

これがバグなのか、教義や私のモデルにないのかわからない。

しかし、これは1レベルを超えて関連モデルをロードするための最良の方法ですか、それとも同じ結果を達成するための別の方法がありますか?

4

2 に答える 2

3

あなたは単にあなたの関係に一つずつ参加しようとしましたか?関係が正しく設定されていれば、かなりうまく機能します。

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

また、例と比較して、db2sqlクエリを節約します。

于 2009-10-14T16:08:54.313 に答える
2

あなたはこれを行うことができないと言っていますか?

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

issetなしでそれを試みる場合、Doctrineは、値が自動的に取得される前に、値が設定されていることを確認する必要があります。

于 2009-11-06T03:08:50.973 に答える