2010-04-17 77 views
0

我想從數據庫中使用對象獲取信息。用Doctrine檢索對象信息

我真的很喜歡這個方法,因爲這是更面向對象:

$user = Doctrine_Core::getTable('User')->find(1); 
echo $user->Email['address']; 
echo $user->Phonenumbers[0]->phonenumber; 

而不是:

$q = Doctrine_Query::create() 
    ->from('User u') 
    ->leftJoin('u.Email e') 
    ->leftJoin('u.Phonenumbers p') 
    ->where('u.id = ?', 1); 
$user = $q->fetchOne(); 
echo $user->Email['address']; 
echo $user->Phonenumbers[0]['phonenumber']; 

的問題是,第一個使用3個查詢(3個不同的表),而第二個只使用1個(因此是推薦技術)。

但我覺得它破壞了面向對象的設計。導致ORM意味着給我們一種OOP方法,以便我們可以專注於對象而不是關係數據庫。但現在他們希望我們回到使用SQL模式。

有沒有辦法從多個不使用DQL的表中獲取信息?

上面的例子是從文件採取: doctrine

+0

這是一個小問題,但我懷疑第二種方法畢竟只做一個查詢 - 它可能是電子郵件和電話號碼屬性被延遲加載和適當的查詢正在執行通過代理對象,當你請求他們。 – lotsoffreetime 2010-04-19 12:36:07

回答

1
  1. 創建您的表類的定製方法,將返回正確的數據:

    class UserTable extends Doctrine_Table { 
        public function retrieveOne($id) { 
         return $this->createQuery('u') 
            ->leftJoin('u.Email') 
            ->leftJouin('u.Phonenumbers p') 
            ->where('u.id = ?', $id) 
            ->fetchOne(); 
        } 
    } 
    
  2. 您的最終代碼:

    $user = Doctrine::getTable('User')->retrieveOne(1); 
    echo $user['Phonenumbers'][0]['phonenumber']; 
    
+0

哈哈...不錯的一個=) – 2010-04-18 22:22:09