【问题标题】:How to execute Stored Procedures with Symfony2, Doctrine2如何使用 Symfony2、Doctrine2 执行存储过程
【发布时间】:2012-09-20 12:43:08
【问题描述】:

我正在使用以下代码:

use Doctrine\ORM\Query\ResultSetMapping;
...
...
...
...
$em    = $this->get( 'doctrine.orm.entity_manager' );
$rsm   = new ResultSetMapping();
$query = $em->createNativeQuery( 'CALL procedureName(:param1, :param2)', $rsm )
            ->setParameters( array(
                'param1' => 'foo',
                'param2' => 'bar'
            ) );
$result = $query->getResult();
//$result = $query->execute(); // Also tried

$em->flush();
die(var_dump($result));

我在 $result 参数中没有得到任何东西。谁能告诉我如何从 Symfony 2.0.15 中的存储过程中获取结果?

【问题讨论】:

    标签: php mysql symfony stored-procedures doctrine-orm


    【解决方案1】:

    您尚未添加任何结果集映射信息。示例见here

    【讨论】:

    • 嗨 m2mdas,我对 Doctrine 很陌生,你能解释一下我需要在那里添加什么吗?我遇到的问题就像我有 3 个表: users(id,username,groupType[discriminator column]); user_group1(id,firstName,lastName); user_group2(id,displayName);现在我想根据用户 id 和 ( (firstName OR lastName) OR displayName ) 进行查询,我无法为此创建 DQL。因此,我决定在遇到上述问题的地方创建一个存储过程。
    • 我没有使用类表继承,所以我可以给出任何正确的答案。在文档中搜索 setDiscriminatorColumn。但是,如果您想获得数组结果而不是实体对象,您可以通过addScalarResult 来完成。例如$rsm->addScalarResult('username', 'username');
    【解决方案2】:

    我建议使用普通的PDO。在以下示例中,我调用存储过程并获取 OUT 参数的值。

    使用INOUT 参数的过程:

    CREATE PROCEDURE `CLONE_MEMBER_PRODUCT` (IN ID INT, OUT NEW_ID INT)
    BEGIN
        /* ... */
    END;
    

    getWrappedConnection() 返回Doctrine\DBAL\Driver\Connection 的实例,它只是PDO 的包装器

    /* @var $connection \PDO */
    $connection = $this->getEntityManager()
        ->getConnection()
        ->getWrappedConnection();
    
    $stmt = $connection->prepare('CALL CLONE_MEMBER_PRODUCT(?, @NEW_ID)');
    $stmt->bindParam(1, $id, \PDO::PARAM_INT);
    $stmt->execute();
    
    $stmt = $connection->query("SELECT @NEW_ID");
    $id = $stmt->fetchColumn();
    

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 2020-02-11
      • 2012-06-19
      • 2011-01-29
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多