【发布时间】:2013-10-22 12:42:05
【问题描述】:
我正在与 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] 的内容,它们都是正确的并且都已填写。它不会覆盖$foo->attributes 中的amount。
验证规则
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 数组没有的字段,但它们似乎很好地合并。我也应该添加这些还是它们无关紧要?
【问题讨论】:
-
我建议您将字段从整数更改为小数。如果您的金额是 2.3,那么这不适用于整数。只有整数(整数),即 1,2,16,29 有效。
-
@JonPaulH 金额字段只能是整数。
-
如果你说 $foo->amount = 10; 会发生什么? $foo->save();
-
ok,这项工作是否有效 $foo->attributes = $_POST['Foo'][$i]; $foo->金额 = 10; $foo->保存();然后请检查 $foo->attributes = $_POST['Foo'][$i]; $_POST['Foo'][$i]['amount'] = 10; $foo->amount = $_POST['Foo'][$i]['amount']; $foo->save();
标签: php yii http-post yii-cactiverecord