2012-03-28 117 views
0

我只是教Symfony和Doctrine。 我不知道在Doctrine中獲取1行數組而不是多行數組。 我使用這個:Symfony 1.4,學說(學說:: HYDRATE_ARRAY非複數)

$q = $this->createQuery('a') 
     ->innerJoin('a.Translation t') 
     ->andWhere('t.lang = ?', $language) 
     ->andWhere('t.name LIKE ?', 'somename%'); 

    return $q->execute(array(), Doctrine::HYDRATE_RECORD); 

然後我得到的東西,如:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [created_at] => 2012-03-19 17:40:52 
      [updated_at] => 2012-03-21 17:44:04 
      [created_by] => 1 
      [updated_by] => 1 
      [Translation] => Array 
       (
        [en] => Array 
         (
          [id] => 1 
          [name] => somename 
          [lang] => en 
          [slug] => somename 
         ) 

       ) 

     ) 

) 

但我需要

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [created_at] => 2012-03-19 17:40:52 
      [updated_at] => 2012-03-21 17:44:04 
      [created_by] => 1 
      [updated_by] => 1 
      [id] => 1 
      [name] => somename 
      [lang] => en 
      [slug] => somename 
     ) 

) 

一些身體知道如何我能做到嗎?

+0

添加fetchOne(),而不是執行()? – 2013-07-02 08:01:05

回答

1

我只使用

$q = $this->createQuery('a') 
    ->select('a.id as id, t.name as name') 
    ->leftJoin('a.Translation t') 
    ->where('t.name LIKE ?', $name.'%') 
    ->andWhere('t.lang = ?', $language); 
0

你有沒有試圖顯式地添加一個你需要的列的選擇?

$q = $this->createQuery('a') 
     ->select('a.id, a.created_at, a.updated_at, a.created_by, a.updated_by, t.id, t.name, t.lang, t.slug') 
     ->innerJoin('a.Translation t') 
     ->andWhere('t.lang = ?', $language) 
     ->andWhere('t.name LIKE ?', 'somename%'); 

return $q->execute(array(), Doctrine::HYDRATE_ARRAY); 
+0

試過了,結果相同。 – user1256630 2012-03-28 17:27:10

0

使用關鍵字WITH

$q = $this->createQuery('a') 
     ->innerJoin('a.Translation t WITH t.lang = ?', $language) 
     ->where('t.name LIKE ?', 'somename%'); 
return $q->execute(NULL, Doctrine::HYDRATE_ARRAY);