我正在和 Yii 一起工作。在我的控制器中,我使用以下代码用我的 POST 输入值更新我的模型属性值:
$foo->attributes = $_POST['Foo'][$i];
这会覆盖我的所有属性,除了一个。我无法弄清楚为什么它不会覆盖那个单一的。
表结构:
price (decimal 11,2)
amount (int 11)
period (varchar 255)
我无法覆盖该amount
字段,甚至无法手动覆盖。是因为它是一个int
?不过我之前没有遇到过问题int
。
我曾经var_dump()
检查过两者的内容,$foo->attributes
并且$_POST['Foo'][$i]
它们都是正确的并且都已填写。它只是不会覆盖amount
in $foo->attributes
。
验证规则
array('period, price', 'required'),
array('amount', 'numerical', 'integerOnly'=>true),
array('period', 'length', 'max'=>255),
array('price, amount', 'length', 'max'=>10),
array('amount, period, price', 'safe', 'on'=>'search')
amount
应始终为整数。测试值为 10、20、30。
问题示例
var_dump( $foo->attributes );
var_dump( $_POST['Foo'][$i] );
$foo->attributes = $_POST['Foo'][$i];
var_dump( $foo->attributes );
输出以下内容:
//$foo->attributes
array (size=3)
'price' => string '140.00' (length=6)
'amount' => string '10' (length=2)
'period' => string 'monthly' (length=6)
//$_POST['Foo'][$i]
array (size=3)
'price' => string '150.00' (length=6)
'amount' => string '20' (length=2)
'period' => string 'yearly' (length=6)
//$foo->attributes after rebinding
array (size=3)
'price' => string '150.00' (length=6)
'amount' => string '10' (length=2)
'period' => string 'yearly' (length=6)
里面还有一些额外的字段。例如,模型还有一些$_POST
数组没有的字段,但它们似乎很好地合并。我也应该添加这些还是无关紧要?