2017-08-29 17:46:09 2538次浏览 4条回答 0 悬赏 10 金钱

因为才接触Yii,不是很清楚。
现在是这样,已经写好一个商铺(Store)的update方法了。
然后有一个按钮是开启、关闭商铺 即更改status字段。
那我是不是也调用update方法呢,但是如果被恶意或则无意多传入一些store表中比较重要的字段也会跟着
更新,我认为不是我想要的结果 。
我只想只更新我需要的参数,而不是更新调用者传递的所有参数 。
这样是不是要另开一个方法,然后给model赋值?
如果这个接口是更改多个属性,我是不是就要每一个都赋值一次?
感觉有点麻烦,希望有好的解决方案。

最佳答案

  • 嗯嗯 发布于 2017-08-31 10:14 举报

    unset掉不更新的字段

    2 条回复
    回复于 2017-08-31 17:14 回复

    嗯 ,现在是写了一个方法来过滤传递的数据。

    回复于 2017-08-31 17:16 回复

    我以为设置了场景在load的时候只会设置场景里配置的字段,看了源码发现load方法和场景没联系,save方法也只是场景和规则的验证 没有过滤

  • 回答于 2017-08-29 22:34 举报

    使用场景,在指定场景只允许更新指定数据。

    具体教程网上较多,本站也有很多,请自行查阅。

    比如:http://www.imooc.com/article/13668

    1 条回复
    回复于 2017-08-30 15:26 回复

    试了一下好像不行,我想直接通过$model->load($data) && $model->save()更新数据,场景只能用于验证好像不能指定更新的字段

    觉得很赞
  • 回答于 2017-08-31 17:37 举报

    在提前数据前做一个validator验证 或者写一个rule验证 过滤不必要的参数 如果提交的字段对应数据表 可以使用load 不然 要挨个赋值 也可以将获取的值 取到同一个数组中 将数据组添加到数据表中

  • 回答于 2017-09-09 09:23 举报

    你可以尝试使用updateAll()方法,如要
    更新store表的status字段,可以参考如下写法:
    $param = '要更改的值';
    $id = '对应的字段id';
    Store::updateAll(['status' => $param], 'id' => $id);
    这时就只修改status的值了,一般用0,1表示开关功能

您需要登录后才可以回答。登录 | 立即注册
qq308375072
助理

qq308375072

注册时间:2017-08-29
最后登录:2018-09-03
在线时长:11小时18分
  • 粉丝0
  • 金钱40
  • 威望0
  • 积分150

热门问题