2010-11-22 5 views
3

私は次の表を持って教義select文は、常にテーブルのすべてのフィールド

Test: 
    tableName: test 
    columns: 
     test_id: 
      name: test_id as id 
      primary: true 
      autoincrement: true 
      type: integer 
      notnull: true 
     test_name: 
      name: test_name as name 
      type: string(255) 
     test_title: 
      name: test_title as title 
      type: string(255) 

このDQL声明

$dql = Doctrine_Query::create()->select('t.name')->from('Model_Test t'); 

次のSQL ISTは

SELECT t.test_id AS t__test_id, t.test_name AS t__test_name FROM test t 

が、後を生成返します教義の結果をフェッチすると、選択されていなくてもタイトルフィールドにアクセスできます:

foreach ($results as $result) { 
    foreach ($result as $filed => $value) { 
     echo "$filed => $value <hr>"; // echoes 'title' => null but title in db has other value 
    }         
}         

また、Zend_Debug :: dump($ results-> toArray())によるダンプ。すべてのフィールドを選択したかのように表示*

どのように返されたフィールドを自分の選択に合わせて制限するか?事前

マーティン

+0

選択したフィールドが含まれていますあなたは、このための解決策を見つけましたか?私もそれで苦労しています。私はajax消費者のためにjsonとして不要なゴミを渡したくない。 –

+0

Nevermind、 - > setHydrationMode(Doctrine :: HYDRATE_ARRAY)が解決しました。 –

答えて

0

おかげで私はわからないが、私は教義がちょうどidnameを選択だと思いますが、あなたがtitleにアクセスしようとすると、それはtitleはDBからのフェッチではないことを認識します。したがって、doctrineはそのオブジェクトを再設定します(今度はSELECT *または類似のクエリを使用します)。

Doctrineクエリプロファイラを使用している場合は、おそらくforeachループで必要な追加クエリがすべて表示されます。あなたはフィールドの一部だけの部分を選択したい場合は

ただ、野生quessは、...

ああところで、あなたは$query->execute(Doctrine::HYDRATE_ARRAY)を使用することができます。

+1

yesとno:doctrineはすべてのフィールドを取得しますが、選択したフィールドのみが値を持ちます(タイトルはテーブルに別の値があってもnullと表示されます)。これは混乱しています。ライブラリでクエリをアウトソーシングすると、ライブラリを使用しているユーザーはクエリを認識しません。彼は、titleが選択されていないためにnullであるか、またはtitleがdb内でヌルであるかどうかを知りません。私は選択されたフィールドの上だけ選択したフィールド上で繰り返し行う方法を探しています... – Martin

3

らしい:

$results = $dql->execute(); 

オブジェクトとして結果をフェッチするため

$results = $dql->fetchArray(); 

アレイを取り出し、一方、非選択VARSがヌル

が充填されている

とこの場合、選択したフィールドのみが表示されます(プライマリキー以外)

+0

これは私のために違いがあります。 'Doctrine_Core :: HYDRATE_ARRAY'パラメータを' execute'や 'fetchOne'に渡すこともできます。' fetchArray'と同じ結果が得られます。 –

1

この1つは私の作品、そして唯一の照会フィールドフェッチ:

$events = Doctrine_Query::create() 
    ->select("e.id, e.Title, e.Lat, e.Lon, e.Startdate, e.Location, e.Url") 
    ->from('Event e') 
    ->setHydrationMode(Doctrine::HYDRATE_ARRAY) 
    ->execute(); 

を結果の配列は

関連する問題