繁体   English   中英

Doctrine get数组没有前缀或后缀

[英]Doctrine get array without prefix or suffix

我试图从平面数组中返回的doctrine获取连接数据。 使用不同的方法可以做到这一点,但是我还是将表别名添加到我的列名之前,或者将索引添加到我的列名后。 示例如下:

我的查询(使用查询生成器):

$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)我的输出如下所示:

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_”。 因此,经过一些阅读后,我看到可以编写自己的定制水合物。 所以我按如下方式制作了保湿剂。

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,如果列名不是唯一的,它可能会将索引添加到列名中。 但是,所有列都是唯一的。 我不想迭代返回的数据并去除前缀/后缀,而是以正确的方式返回它。

提前致谢。

我找到了一个临时解决方案,尽管并不理想。 使用$query->getResult(AbstractQuery::HYDRATE_SCALAR)并从组级别表$qb->select('m.MAINCAT, i.IMAGE_NAME, gl.GROUP_LVL_ID, gl.PARENT_LVL_ID ... ')指定每一列将返回没有前缀的列。 理想情况下,我不需要指定要提取的每一列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM