如何将附加变量传递给匿名 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$myOrderfunction(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 的更多信息。