【问题标题】:Native SQL in Doctrine: set types of multiple query parametersDoctrine 中的原生 SQL:设置多个查询参数的类型
【发布时间】:2017-11-24 08:55:38
【问题描述】:

我正在使用 NativeSQL,我需要设置未定义数量的参数。我的代码:

$entityManager = $this->getEntityManager();
$rsm = new Query\ResultSetMappingBuilder($entityManager);
$mySql = "
   SELECT *
   FROM table1 t1
   INNER JOIN table2  t2 ON t2.t1_id = t1.id
   ...
   WHERE t1.name = :t1_name AND t2.age = :t2_age AND ...
";
// array of multiple query parameters (name, value)
$queryParameters = array(
   't1_name' => 'Andy',
   't2_age' => 12,
   ...
);
$query = $entityManager->createNativeQuery($mySql, $rsm);
$query->setParameters($queryParameters);
$salidas = $query->getResult();

我需要设置每个查询参数的类型,但是 setParameters() 函数不允许传递这些类型。

我看到 AbstractQuery(Doctrine 类)的 setParameter() 函数允许传递这种类型,但我想使用 setParamaters() 函数,因为我必须传递未定义数量的参数...

我该如何解决这个问题?谢谢。

【问题讨论】:

  • “我需要设置每个查询参数的类型”是什么意思?
  • WHERE 参数的类型。在我的示例中: :t1_name (字符串类型)和 :t2_age (整数类型)。例如,类似:PDO bindParam()
  • 为什么需要这个?对我来说,您的问题似乎是XY problem:询问您尝试的解决方案,而不是您的实际问题

标签: php symfony doctrine-orm doctrine


【解决方案1】:

您可以使用以下方法将多个参数传递给您的查询:

$entityManager = $this->getEntityManager();

$sql = "
   SELECT *
   FROM table1 t1
   INNER JOIN table2  t2 ON t2.t1_id = t1.id
   ...
   WHERE t1.name = :t1_name AND t2.age = :t2_age AND ...
";

// array of multiple query parameters (name, value)
$stmt = $entityManager->getConnection()->prepare($sql);

$stmt->execute([
    't1_name' => 'Andy',
     t2_age' => 12,
    ...
]);

$results = $stmt->fetchAll();

参考Data Retrieval And Manipulation

【讨论】:

    【解决方案2】:

    使用这个solution 一切都很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2019-10-17
      • 2016-11-30
      相关资源
      最近更新 更多