关于FecMall的AR save()

技术问题 · mztest · 于 3年前 发布 · 1004 次阅读
Yii::$service->helper->ar->save($model, $one);

这个方法在更新一条记录时,会产生类似的SQL记录

UPDATE `employee` SET `id`=1, `shop_id`=1, `status`=1, `updated_at`=1616763224 WHERE `id`=1

Yii2 原本的AR, save() 方法不会:

  1. ‘id’ 这种主键不会在更新字段中 (这里出现这个字段个人比较在意)
  2. 所有没有发生变化的字段不会出现更新字段中。

怀疑是因为save方法的赋值造成的。 临时解决方案,在传入的$one之前去掉主键字段

$primaryKey = $this->getPrimaryKey();
ArrayHelper::remove($one, $primaryKey);
共收到 1 条回复
Fecmall#13年前 0 个赞

这个save方法,就是可以绕过model rules,直接全面赋值,不需要再rules添加,譬如订单表的数据,产品表的数据非常多。

在save前,你可以执行unset($one['id'])去掉id

譬如:https://github.com/fecshop/yii2_fecshop/blob/master/services/cms/article/ArticleMysqldb.php#L176

当然,这个是灵活的,您如果不喜欢这种,您也可以按照yii2的那种save二次开发您的新功能。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics