私はdoctrineからの結合データをフラットな配列に戻そうとしています。これは、異なるメソッドを使用することで可能ですが、私はテーブルのエイリアスを自分のカラム名の前に付けるか、カラム名の後ろにインデックスを続けます。例としては、次のとおりです。Doctrine接頭辞または接尾辞なしの配列を取得
マイクエリ(使用してクエリビルダ):
array(12) {
["gl_GROUP_LVL_ID"]=>
int(4)
["gl_PARENT_LVL_ID"]=>
int(0)
["gl_DESCRIPTION"]=>
string(18) "Second description"
["gl_MAINCAT_ID"]=>
int(2)
["gl_USER_GROUP_ID"]=>
int(7)
["gl_IMAGE_ID"]=>
int(6)
["gl_ORPHAN_GROUP"]=>
int(0)
["gl_ANIMATION_ID"]=>
int(-1)
["gl_SEQUENCE_NO"]=>
int(6)
["gl_IMAGINE_ID_DESCRIPTION"]=>
string(25) "GROUP_LEVEL_DESCRIPTION_6"
["MAINCAT"]=>
string(1) "F"
["IMAGE_NAME"]=>
string(12) "some pic.png"
}
問題は、私は表の別名をしたくないです「GL_:
$qb->select('gl, m.MAINCAT, i.IMAGE_NAME')
->from('Entities\GroupLevel', 'gl')
->join('Entities\Maincat', 'm', Expr\Join::WITH, 'gl.MAINCAT_ID = m')
->innerJoin('Entities\Image', 'i', Expr\Join::WITH, 'gl.IMAGE_ID = i')
->where('gl.USER_GROUP_ID = 7 AND gl.MAINCAT_ID = 2');
$query = $qb->getQuery();
は私の出力は次のようになり$query->getResult(AbstractQuery::HYDRATE_SCALAR)
使い方"追加されました。だから、読んだ後、私はあなた自身のカスタムハイドレーターを書くことが可能であることを知りました。だから、私は水分補給を次のようにしました。
class HydrateScalarCustom extends AbstractHydrator
{
protected function hydrateAllData()
{
return $this->_stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
しかし、私は\PDO::FETCH_ASSOC
を使用していても、それはこのように0から始まるインデックスで列をサフィックス:
array(12) {
["GROUP_LVL_ID_0"]=>
string(1) "4"
["PARENT_LVL_ID_1"]=>
string(1) "0"
["DESCRIPTION_2"]=>
string(18) "Second description"
["MAINCAT_ID_3"]=>
string(1) "2"
["USER_GROUP_ID_4"]=>
string(1) "7"
["IMAGE_ID_5"]=>
string(1) "6"
["ORPHAN_GROUP_6"]=>
string(1) "0"
["ANIMATION_ID_7"]=>
string(2) "-1"
["SEQUENCE_NO_8"]=>
string(1) "6"
["IMAGINE_ID_DESCRIPTION_9"]=>
string(25) "GROUP_LEVEL_DESCRIPTION_6"
["MAINCAT_10"]=>
string(1) "F"
["IMAGE_NAME_11"]=>
string(12) "some pic.png"
}
は、あなたが任意のアイデアを持っているなら、私に知らせてください。 PDOで列名が一意でない場合は、列名に索引を追加する可能性があると聞いています。ただし、すべての列は一意です。返されたデータを繰り返し処理したり、接頭辞/接尾辞を削除したりするのではなく、正しい方法で返すようにします。
ありがとうございます。