【问题标题】:ZF2 : Change a row field in ResultSetZF2:更改 ResultSet 中的行字段
【发布时间】:2014-06-10 16:57:53
【问题描述】:

我想在将结果集中的行字段返回给我的控制器之前更改它。

$resultSet->buffer();
foreach ($resultSet as $row) {
    $row->foo = $newvalue;
}
return $resultSet;

问题是,当我使用 buffer() 函数时,我确实可以循环遍历我的 ResultSet 并对我的行进行一些更改,但是一旦循环结束,所有更改都消失了。

我尝试在 $row 上设置引用:

foreach ($resultSet as &$row)

但随后发现了以下异常:

 Fatal error: An iterator cannot be used with foreach by reference

我也尝试将 resultSet 更改为数组,但出现了同样的问题。 我错过了什么吗?

【问题讨论】:

    标签: foreach zend-framework2 buffer resultset


    【解决方案1】:

    我认为通过通常的ResultSet 用法是不可能的。仅当您要在循环中使用array(本例中为 foreach())时,数组解决方案才可能有效。

    来自任何 Table 类 -

    $arr_resultSet = array();
    
    foreach ($resultSet as $row) {
        $row->foo = $newvalue;
    
        //Object is assigned instead of converting it to an array.
        $arr_resultSet[] = $row;  
    }
    return $arr_resultSet;
    

    在控制器或视图文件中使用此数组 -

    //Here you can access that $row object as if the $resultSet was never converted to array.
    foreach($arr_resultSet as $row) {
        echo $row->foo;                   
    }
    

    不需要buffer()。我希望它现在有效。一定会寻找合适的解决方案。

    【讨论】:

    • 哇。我尝试使用 toArray() 函数,但后来变得一团糟,因为我有嵌套数组而不是对象。您的解决方案是如此简单,我想知道我是如何错过它的。它工作正常,对我来说似乎是一个合理的解决方案,所以我已经将其设置为已回答。无论如何,如果你想出一个合适的解决方案,我会很高兴看到它。非常感谢:)
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多