我有我的modelTable,一切正常,但我试图将一些变量传递给函数,并且无法识别变量。
我在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错误:
无法执行语句(42000 - 1064 - 您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行使用'= NULL ORDER BY ASC'附近的正确语法)
我该如何解决这个问题?有什么想法吗?
答案 0 :(得分:3)
这里与ZF2无关。由于select()
和where()
方法的参数是closure的实例,因此$myWhere
和$myOrder
参数都不在范围内。闭包无法访问定义或执行它的范围。
无论如何,您可以尝试使用use
关键字(语言结构)传递additinal变量,如下所示:
$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的更多信息。