2009-10-01 72 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,學說應該檢查該值自動檢索爲您之前設置。