phalcon框架 - >编辑模型:: find();导致foreach循环

时间:2014-05-11 12:45:53

标签: object phalcon volt

http://docs.phalconphp.com/en/latest/reference/models.html#understanding-records-to-objects所述,您可以在对象加载到内存后对其进行编辑。

    $settingCategories = SettingCategory::find();
    foreach($settingCategories as $settingCategory){
        if($settingCategory->type == "2"){
            $settingCategory->type = "asd";
            $settingCategory->intersection = "asd";
        }else{
            $settingCategory->type = "blaa";
            $settingCategory->intersection = "blaa";
        }
        $settingCategory->type = "test";
    }
    $this->view->setVar("settingCategories",$settingCategories);
当我使用volt:

循环时,

type仍然是它的默认值

{% for settingCategory in settingCategories %}
<div class="tab-content">
    <h4>{{ settingCategory.name }}</h4> 
    <h4>{{ settingCategory.type }}</h4> --> still (int) integer!?
    <h4>{{ settingCategory.intersection }}</h4> --> undefined!?
</div>
{% endfor %}

1 个答案:

答案 0 :(得分:1)

在foreach中修改变量时,您正在修改“临时变量”。这意味着因为它只是真实变量的副本,所以当你更改它时,数组中的实际值不会改变。现在,你可以做些什么来解决这个问题:

塞特斯/吸气剂

我个人更喜欢这个。如果您想要做的是数据转换(I.E.您将字段的值从一个事物更改为另一个事物,并且您希望在代码中使用新值),我将使用setter和getter。这是一个例子:

// This is inside your model
protected $type;

public function getType()
{
    if ($this->type === 2) {
        return "asd";
    } else {
        return $this->type;
    }
}

public function setType($type)
{
    if ($type === 2) {
        $this->type = "asd";
    } else {
        $this->type = 1; // or $type, or anything really :)
    }
}

当然,在您的代码中,您必须根据您是在阅读值还是为其分配内容,将$category->type更改为$category->getType()$category->setType($type)

快速而肮脏的方式

好吧,如果您的用例不同,您可以通过简单的修改来使用当前的代码块。将您的foreach更改为foreach($settingCategories as &$settingCategory)。 &符号使变量作为参考传递到块中(例如,它不像您当前的情况那样复制)。这意味着改变它将改变真正的价值。