2011-08-26 28 views
0

只要寫這樣的查詢:要編寫一個查詢返回的對象學說

$q = Doctrine_Query::create() 
->select('r.title, r.title_safe, r.description') 
->from('Regions r') 
->where('pr.page_id = ?', 1) 
->leftJoin('r.Page_regions pr'); 

$results = $q->execute(array(), Doctrine::HYDRATE_ARRAY); 

,但我想$結果對象。我能怎麼做?

回答

1

只需使用不帶參數的execute方法。

$ q-> execute();

+0

這不是給相同的結果陣列。只想返回字段。 – MAB

+0

你是什麼意思'只想返回領域? – xdazz

+0

希望得到與execute(array(),Doctrine :: HYDRATE_ARRAY)相同的結果; 像: 陣列 ( [0] =>數組 ( [ID] => 1 [標題] =>標題 [title_safe] =>頭 [描述] => Sayfa UST BARI ) 但我不想得到結果像數組我想要得到的結果像對象 – MAB

0
$q = Doctrine_Query::create() 
->select('r.title, r.title_safe, r.description') 
->from('Regions r') 
->where('pr.page_id = ?', 1) 
->leftJoin('r.Page_regions pr'); 

$q = $q->getQuery()->getResult(); 
+0

致命錯誤:調用成員函數getResult()對一個非對象 – MAB

0

您正在使用HYDRATE_ARRAY標誌,返回所有結果陣列。您可以省略此標誌以將結果作爲對象返回。

由於Doctrine_Query::execute()返回一個Doctrine_Collection對象,因此可以調用許多方法來獲取所需的結果(請參閱Doctrine_Collection API Documentation)。如果你只是想要一個結果,嘗試這樣的事情:

$q = Doctrine_Query::create() 
    ->select('r.title, r.title_safe, r.description') 
    ->from('Regions r') 
    ->where('pr.page_id = ?', 1) 
    ->leftJoin('r.Page_regions pr'); 

    /* @var Doctrine_Record */ 
    $results = $q->execute()->getFirst(); 
0

我認爲有一種方式來獲得PDOStatement表示。讓我回到你身邊。

這是一個快速解決方案。但是,這隻適用於來自實際模型的數據(關係數據將是對象的數組)。

$objs = array(); 
foreach ($q->fetchArray() as $arr) { 
    $objs = (object)$arr; 
} 

- 編輯 -

找不到它。但你可以延長Doctrine_Query課程。

class App_Doctrine_Query extends Doctrine_Query 
{ 
    public function fetchObjects(array $params = array()) 
    { 
     return array_map(array($this, 'convertArrayToObject'), $this->fetchArray($params)); 
    } 


    private function convertArrayToObject(array $arr) 
    { 
     $obj = new stdClass(); 

     foreach ($arr as $key => $val) { 
      if (is_array($val)) { 
       $val = $this->convertArrayToObject($val); 
      } 

      $obj->$key = $val; 
     } 

     return $obj; 
    } 
} 

而在你的引導程序將添加像這樣:

$manager = Doctrine_Manager::getInstance(); 
$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 'App_Doctrine_Query'); 
相關問題