2016-03-24 18 views
1

私は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で列名が一意でない場合は、列名に索引を追加する可能性があると聞いています。ただし、すべての列は一意です。返されたデータを繰り返し処理したり、接頭辞/接尾辞を削除したりするのではなく、正しい方法で返すようにします。

ありがとうございます。

答えて

0

私は一時的な解決策を見つけましたが、理想的ではありません。 $query->getResult(AbstractQuery::HYDRATE_SCALAR)を使用し、グループレベルテーブル$qb->select('m.MAINCAT, i.IMAGE_NAME, gl.GROUP_LVL_ID, gl.PARENT_LVL_ID ... ')から各列を指定すると、接頭辞なしの列が返されます。理想的には、フェッチする各列を指定する必要はありません。

関連する問題