tdweb 2011-09-14 11:17:00 8131次浏览 5条回复 0 0 0

今天打算直接$arModel->insert($data);后来发现不行,原来$data只能制定要更改哪个字段,而不能传值。 所以添加操作的时候只能 $arModel = new Some(); $arModel->field="abc"; $arModle->field_2 = "def"; $arModel->save();这样

而不能 $data['field'] = "abc"; $data['field_2'] = "def"; $arModel->save($data);

我觉得用数组传值很有必要,这样不会引起不必要的变量污染

而如果我们总用属性传值,如果之前的属性没有重置,后来我们再次做Save操作的时候,那么本次save操作就还会带上我们之前没有重置的数据,那么这样就造成了变量污染。

除了使用beforeSave操作进行 刷新属性之外,还有其他的解决办法吗?

最好能直接用数组传值。

  • 回复于 2011-09-14 11:24 举报
    $data['field'] = "abc";
    $data['field_2'] = "def";
    $arModel->attributes = $data;
    $arModel->save();
    

    可以这样用啊!

  • 回复于 2011-09-14 11:29 举报

    感谢回复,请问,例如

    $arModel = new Some();
    $arModel->field = "abc";//这个有可能是在初始化方法里的
    
    $data['field_2'] = "def";
    $arModel->attributes = $data;
    $arModel->save();
    

    这样操作,有没有可能把filed="abc"也赋值上呢?

  • 回复于 2011-09-14 11:39 举报

    如果我们要做到数据不被污染,我们貌似只能$arModel->save(array("field_2"));这样,限定我们要更改哪些数据,但显然这挺麻烦的。

  • 回复于 2011-09-14 11:41 举报

    你这是插入数据,又不是更新,还存在什么污染?

    觉得很赞
  • 回复于 2017-12-05 15:09 举报

    谁知道yii2 中 activeRecord 中public function insert($runValidation = true, $attributes = null) 中第二个参数是如何用的?谢谢!第二个参数加了个字段值数组,好像没什么效果,各位大侠有知道的吗?在线等。。。。。。。。。。。。。。

您需要登录后才可以回复。登录 | 立即注册