如何将其他变量传递给匿名TableGateway方法参数?

时间:2015-06-30 19:02:47

标签: php mysql sql zend-framework2

我有我的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$myOrderfunction(Select $select)内无法识别,我有一个SQL错误:

  

无法执行语句(42000 - 1064 - 您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行使用'= NULL ORDER BY ASC'附近的正确语法)

我该如何解决这个问题?有什么想法吗?

1 个答案:

答案 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的更多信息。