Yii2——模型(Model)中的变量命名应注意

继承自 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 进行赋值。

猜你喜欢

转载自www.cnblogs.com/alanabc/p/9437689.html