テーブル用の単純な列が必要です。
たとえば、列id
、name
、およびyear
を持つテーブル "project"。
私が行った場合:
$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id =?',1);
$pro = $q->execute();
json_encode($pro->toArray());
答えはすべての列のようなものです
{"id":1,"name":"Project name","year":2013}
しかし、必要な列は1つだけです。私が期待する:
{"id":1}
ネイティブSQLで問題なく動作するため、DQLを使用します。
ORMは、ビジュアルパラダイムを使用して自動的に構築されます。
これは、Doctrineがすべてのオブジェクト情報、つまりすべての列で応答をハイドレイトするためです。
別の水分補給方法を使用する必要があります 多くあります ですが、そのうちの5つに焦点を当てましょう:
HYDRATE_RECORD
_、デフォルトのものHYDRATE_ARRAY
_HYDRATE_NONE
_HYDRATE_SCALAR
_HYDRATE_ARRAY_SHALLOW
__HYDRATE_ARRAY_SHALLOW
_水和法が必要です。これが理由です。
HYDRATE_RECORD
_$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id = ?',1);
$pro = $q->execute(array(), Doctrine_Core::HYDRATE_RECORD);
var_dump(json_encode($pro->toArray()));
_
これにより、オブジェクトを使用して結果がハイドレートされ、リレーションもハイドレートされます(クエリ内でleftJoinを使用する場合)。オブジェクトを返すため、propre jsonを送信できるようにするには、toArray()
を呼び出す必要があります。
_[{"id":1,"name":"Project name","year":2013}]"
_
HYDRATE_ARRAY
_$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id = ?',1);
$pro = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
var_dump(json_encode($pro));
_
これにより、結果が配列としてハイドレイトされ、主キーが自動的に追加されます。
_[{"id":"1","pro_id":"1"}]"
_
HYDRATE_NONE
_$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id = ?',1);
$pro = $q->execute(array(), Doctrine_Core::HYDRATE_NONE);
var_dump(json_encode($pro));
_
これは結果を水和せず、値だけを返します。
_[["1"]]"
_
HYDRATE_SCALAR
_$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id = ?',1);
$pro = $q->execute(array(), Doctrine_Core::HYDRATE_SCALAR);
var_dump(json_encode($pro));
_
これにより、selectの結果がハイドレイトされますが、テーブルエイリアスの列名としてキーインデックスが使用されます。
_[{"a_pro_id":"1"}]"
_
HYDRATE_ARRAY_SHALLOW
_$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id = ?',1);
$pro = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY_SHALLOW);
var_dump(json_encode($pro));
_
これにより、selectの結果がハイドレイトされますが、テーブルエイリアスなしで列名としてキーインデックスが使用されます。
_"[{"pro_id":"1"}]"
_
Doctrine j0kが使用しているバージョンがわかりません。いくつかの回答がありましたが、Doctrine_QueryクラスとDoctrine_Coreクラスを見つけるのに問題がありました。Doctrine = 2.3.4。以下は私のために働いた。
public static function getAllEventIDs($em) {
return parent::getAllFromColumn('\path\to\Entity\entityName', 'id', $em);
}
public static function getAllFromColumn($tableName, $columnName, $em) {
$q = $em->createQueryBuilder('t')
->select("t.$columnName")
->from($tableName, 't');
$q = $q->getQuery();
$result = $q->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR);
return $result;
}
ただし、これは配列の配列を返しました。つまり、最初のイベントのIDは
$result[0]['id'];