我在MSSQL服务器上有以下表格:
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
用于调试目的返回:
SELECT [dbo.Superheroes]。[real_name] AS [real_name] FROM [dbo.Superheroes] WHERE name IN('')"
而不是完整的查询。我该如何解决这个问题?请注意我不会在生产中使用var_dump
。
答案 0 :(得分:1)
我认为你需要使用In Predicate,因为where方法需要这个,但是如果给定正确的数组或字符串,该方法也会为你创建正确的谓词。
您可以在此处找到文档.. https://framework.zend.com/apidoc/2.1/classes/Zend.Db.Sql.Predicate.In.html
您不必直接使用该课程,您可以...
基本示例:
$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