继承自 ActiveRecord 的模型(Model),在对变量进行命名时应该尽量避免与数据库字段相同,否则在其他模型中对此数据表进行增、改时,save() 操作可能会不生效或无法达成预期结果。
比如有数据表 order ,对应的有模型 Order.php:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Order extends ActiveRecord{
public $payee; //这个变量名与数据表order中的字段payee相同
public function searchByPayee(){
// do search.
}
}
此时我为了创建一个增加 order 的活动表单(ActiveForm),就会新建一个模型 OrderAddForm.php:
namespace app\models;
use yii\base\Model;
class OrderAddForm extends Model
{
public $payee;
public function rules()
{
return [
['payee', 'required', 'message' => '不能为空']
];
}
public function add(){
$model = new Order();
$model->payee = $this->payee; //因为上一个模型的变量命名问题,这里就变成了给上一个模型的$payee字段赋值,而不是给数据字段赋值
// ...
return $model->save();
}
}
虽然能够新增一条数据(允许 payee 字段为NULL的前提下),但是 payee 字段就会是空的。因为 OrderAddForm.php 中进行 add() 时,本来应该给数据字段赋值的 $model->payee = $this->payee
变成了给 Order.php 中的变量 $payee 进行赋值。