我正在尝试从平面数组返回的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,如果列名不是唯一的,它可能会将索引添加到列名中。但是,所有列都是唯一的。我不想迭代返回的数据并去除前缀/后缀,而是以正确的方式返回它。
提前致谢。
答案 0 :(得分:0)
我找到了一个临时解决方案,但并不理想。使用$(document).ready(function(){
$("a#show-panel").click(function(){
$("#lightbox, #lightbox-panel").fadeIn(300);
$('html').css('background-color', 'rgba(0,0,0,0.8)')
});
$("a#close-panel").click(function(){
$("#lightbox, #lightbox-panel").fadeOut(300);
})
});
并指定组级别表$query->getResult(AbstractQuery::HYDRATE_SCALAR)
中的每个列将返回没有前缀的列。理想情况下,我不需要指定每个列来获取。