如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 %}
答案 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)
。 &符号使变量作为参考传递到块中(例如,它不像您当前的情况那样复制)。这意味着改变它将改变真正的价值。