一千萬個為什麽

搜索

使用Doctrine檢索對象信息

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

我真的很喜歡這種方法,因為這是更多的OOP:

$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的多個表中獲取信息?

the above examples are taken from the documentation: doctrine

最佳答案

  1. Create a custom method in your Table class that will return proper data:

    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. Your final code:

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

轉載註明原文: 使用Doctrine檢索對象信息