我刚刚了解了YII2框架,我只是创建了一个activerecord模型。让我们说Item
,并在表item
上添加一个触发器,然后再插入以向字段添加值。我正在尝试像这样测试:
$item = new Item();
$item->name = 'item 1';
$item->save();
die(var_dump('<pre>', $item->attributes));
并触发如下代码:
BEGIN
SET new.mycolumn = store_procedured_function();
END
转储结果是
Array(
['id']=>
int(123)
['name']=>
string(6) "item 1"
['mycolumn']=>
NULL
);
但是当我检查数据库mycolumn
时不为null,并且id
返回值。为什么mycolumn
没有显示类似id
的值?以及如何在activerecord函数save()之后获得mycolumn
的值?
答案 0 :(得分:0)
出于性能原因,Yii 2在保存后不会自动从数据库中获取属性-在大多数情况下,它不会更改任何内容,只需创建其他无用的查询即可。如果您依赖某些数据库触发器,则可能需要在save()
之后调用refresh()
。
$item->save();
$item->refresh();
var_dump($item->attributes);