如何将附加变量传递给匿名 TableGateway 方法参数?
How to pass additional variables to anonymous TableGateway method arguments?
我有我的模型表,一切正常,但我试图将一些变量传递给函数,但无法识别该变量。
我的函数在Application/Model/someTable.php
/**
* @param array $myWhere
* @param $myOrder
* @return \Zend\Db\ResultSet\ResultSet
*/
public function fetchAllPagination(Array $myWhere,$myOrder)
{
$resultSet = $this->tableGateway->select(function(Select $select){
$select->where(function(Where $where){
$where->equalTo($myWhere[0],$myWhere[1]);
});
$select->order($myOrder);
});
return $resultSet;
}
将其调用到控制器中
$all = $someTable->fetchAllPagination(array('id_user'=>$identity->users_id),'insert_date ASC');
问题是变量 $myWhere
和 $myOrder
在 function(Select $select)
中无法识别,我有一个 SQL 错误:
Statement could not be executed (42000 - 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= NULL ORDER BY ASC' at line 1)
我该如何解决这个问题?有什么想法吗?
此处与ZF2无关。由于 select()
和 where()
方法的参数是 closure 的实例,因此 $myWhere
和 $myOrder
参数都超出了范围。闭包无法访问其定义或执行的范围。
无论如何,您可以尝试使用 use
关键字(语言结构)传递附加变量,如下所示:
$resultSet = $this->tableGateway->select(
function(Select $select) use ($myOrder) {
$select->where(
function(Where $where) use ($myWhere) {
$where->equalTo($myWhere[0],$myWhere[1]);
});
$select->order($myOrder);
});
您可能想在官方文档中阅读有关 anonymous functions 的更多信息。
我有我的模型表,一切正常,但我试图将一些变量传递给函数,但无法识别该变量。
我的函数在Application/Model/someTable.php
/**
* @param array $myWhere
* @param $myOrder
* @return \Zend\Db\ResultSet\ResultSet
*/
public function fetchAllPagination(Array $myWhere,$myOrder)
{
$resultSet = $this->tableGateway->select(function(Select $select){
$select->where(function(Where $where){
$where->equalTo($myWhere[0],$myWhere[1]);
});
$select->order($myOrder);
});
return $resultSet;
}
将其调用到控制器中
$all = $someTable->fetchAllPagination(array('id_user'=>$identity->users_id),'insert_date ASC');
问题是变量 $myWhere
和 $myOrder
在 function(Select $select)
中无法识别,我有一个 SQL 错误:
Statement could not be executed (42000 - 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= NULL ORDER BY ASC' at line 1)
我该如何解决这个问题?有什么想法吗?
此处与ZF2无关。由于 select()
和 where()
方法的参数是 closure 的实例,因此 $myWhere
和 $myOrder
参数都超出了范围。闭包无法访问其定义或执行的范围。
无论如何,您可以尝试使用 use
关键字(语言结构)传递附加变量,如下所示:
$resultSet = $this->tableGateway->select(
function(Select $select) use ($myOrder) {
$select->where(
function(Where $where) use ($myWhere) {
$where->equalTo($myWhere[0],$myWhere[1]);
});
$select->order($myOrder);
});
您可能想在官方文档中阅读有关 anonymous functions 的更多信息。