2012-03-28 136 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);