postgresql - 原则 2 - 来自存储过程的水合

标签 postgresql symfony stored-procedures doctrine-orm doctrine-query

我对存储过程 (pgsql) 没有什么问题。 在这个过程的返回中,数组返回有特殊的结构,我无法以这种方式使用。

我尝试了许多不同的方式来调用 SP 或 Hydratation 方法,但总是返回相同类型的方法。

你能帮我解决这个问题吗?

我的规范:我想要一个数组作为返回值(只需要值),但是 SP 返回一个数组数组,一行一行的结果如下(var_dumped):

array (size=3)
  0 => 
    array (size=1)
      'get_structure_utilisateur' => int 2
  1 => 
    array (size=1)
      'get_structure_utilisateur' => int 1
  2 => 
    array (size=1)
      'get_structure_utilisateur' => int 10

我想要这样的东西:

array (size=3)
    0 => 2
    1 => 1
    2 => 10

我试过这个或这个,结果相同或差异很小:

$query = $this->getEntityManager()
    ->getConnection()
    ->query('select admin.get_structure_utilisateur(3, 1)')
    ->fetchAll();

$sql = "select admin.get_structure_utilisateur(:utilisateurId, :clientId)";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('get_structure_utilisateur', 'structures');
$query = $this->getEntityManager()->createNativeQuery($sql, $rsm)
    ->setParameter('clientId', 1)
    ->setParameter('utilisateurId', 3);
$query->getResult(Query::HYDRATE_SCALAR);// I Try some other hydratation method

谢谢

最佳答案

尝试使用fetchColumn .

    $em = $this->getEntityManager();
    $db = $em->getConnection();
    $stmt = $db->prepare('select admin.get_structure_utilisateur(:utilisateurId, :clientId)');
    $stmt->bindValue('clientId', 1);
    $stmt->bindValue('utilisateurId', 3);
    $stmt->execute();
    while (($row = $stmt->fetchColumn()) !== false) {
        print $row;
    }

关于postgresql - 原则 2 - 来自存储过程的水合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190282/

相关文章:

ruby-on-rails - Rails 在没有关联的列值上过滤记录

postgresql - Sequelize 找到这个或那个

postgresql:嵌套插入

php - 创建用户,但使用 PHP 检查 Active Directory 中是否存在

sql - 在SQL中将字符串列表转换为Int列表

linux - 无法在 Mac 上运行 postgresql(重启后)

symfony - 无法打开输入文件 : bin/codecept

php - 如何使用 Silex autoloader 注册命名空间

mysql - 用于复制数据的存储过程

sql-server-2005 - 从另一个存储过程调用一个存储过程