Zend Db 在哪里

Zend Db Where in

我在 MSSQL 服务器上有以下 table:

Superheroes: id,name,real_name,power

作为输入,我有以下数组:

$heroes=["Superman","Batman","Wonder Woman"]

而且我想使用 Zend Framework 2.3.2 获取他们的真实姓名。 因此在我的模型上我有这个功能:

public function getHeroesRealNames(array $superHeroesNames)
{
  /**
  * @var Zend\Db\Adapter\AdapterInterface
  */
  $db=$this->db;
  $sql=new Sql($db);
  $qb=new Select('dbo.Superheroes');

  $qb->columns(['real_name'])->where('name IN (?)',$superHeroesNames);

  $query_string=$sql->getSqlStringForSqlObject($bq)
  var_dump($query_string);//Debug Output
}

但是 var_dump 用于调试 returns:

SELECT [dbo.Superheroes].[real_name] AS [real_name] FROM [dbo.Superheroes] WHERE name IN ('')"

而不是完整查询。我该如何解决?请注意,我不在生产中使用 var_dump

我认为您需要使用 In Predicate,因为 where 方法需要这个,但如果给定正确的数组或字符串,该方法也会为您创建正确的谓词。

您可以在此处找到文档.. https://framework.zend.com/apidoc/2.1/classes/Zend.Db.Sql.Predicate.In.html

您不必直接使用 class,您可以...

基本示例:

$select->from('Superheroes')->where(array(
    'name' =>$superHeroesNames,
));

您也可以在文档页面上找到相关示例 https://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html#where-having

请注意where方法的第二个参数是组合类型,即AND或OR