本文主要记录本人从学习yii2到使用yii2开发项目过程中遇到的一些问题以及解决方法和知识点总结。

1. AR类关联哪个数据表?

  默认情况下,AR类会根据类名称关联和类名相关的数据表,如:类名为Country时,关联数据表为country;类名为CountrySearch时,关联数据表为country_search。如果在数据库配置中通过“tablePrefix”参数配置了数据表前缀,默认还会加上表前缀。若需要关联的数据表名称和AR类名称不存在这种映射关系,则需要实现tableName()方法返回关联的数据表名称,例如,Country类需要关联country2数据表,可以实现如下:

public static function tableName(){
return '{{%country2}}';
}

其中使用%表示使用数据库配置的表前缀。

2. 执行AR类load()方法块赋值之后,执行save()方法插入或更新数据记录,得到对应记录的数据字段都为空,或者使用了数据表定义的默认值,没有定义默认值而且定义了“not null”的字段还会报错“doesn’t have  a default value”?

  这种情况下就很纠结了,代码、数据表看起来都是对的,但结果就是不如人意。其实这与AR类的块赋值有关。块赋值的时候,AR类会优先赋值“public”和“protected”属性的类成员变量,找不到对应成员变量的时候再去赋值关联数据表中同名的字段。所以,出现这种问题,应该是在AR类中声明了和该类关联数据表字段同名的“public”或“protected”成员变量,块赋值的时候AR类就会把值赋给了成员变量,而数据表的同名字段其实并没有被赋值。

3. 所有表单逻辑都在AR类实现好,还是创建表单模型来分别处理各个表单比较好?

  若所有表单逻辑都在AR类实现,势必需要定义多个场景来区分,当表单越来越多的时候场景也会越来越多,而且可能每次增加场景之后验证规则也要做相应调整,若不细心还会影响其他场景,代码不够清晰。而且可能有些表单要用到的数据表中没有的一些属性还需要定义为AR类的成员变量并添加对应验证规则,验证规则会很乱。若一个表单使用一个表单模型来管理的话,会让代码变得更清晰,更易于维护,但是表单越来越多的时候表单模型类也会越来越多,不过可以使用不同目录来存放模型文件。

  所以,这两种方法各有优缺点,但后者更为可取。

4. 本想更新一条数据记录,结果插入了一条新的记录?

  若想使用模型类的save()或update()方法修改数据表数据,需要先找到对应的记录再去更新数据,否则更新失败。因为模型类需要根据模型对象的_oldAttributes属性去更新对应数据记录,若该属性为空则模型会认为需要插入一条新的记录。

持续更新中...

最新文章

  1. JAVA学习笔记(33-53)
  2. SevenZip.pas BUG修改版 - 20160613
  3. JDK的安装
  4. NET单元测试的艺术
  5. 使用PowerApps快速构建基于主题的轻业务应用 —— 入门篇
  6. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
  7. CCF CSP 201809-1 卖菜
  8. vue mand-mobile ui加class不起作用的问题 css权重问题
  9. NYOJ252-01串-(数位dp)
  10. 20181211 Oracle Parallel
  11. sql server 根据身份证号计算出生日期和年龄的存储过程
  12. Unity背包/商城物品逐个显示缓动效果-依次显示
  13. react-native react-navigation StackNavigator android导航栏 标题下居中
  14. 移植UC15 3G模块
  15. 使用ArcGIS Runtime 100 进行本地GIS数据处理的注意事项
  16. python的类的 静态属性 类方法 静态方法
  17. python导外部包
  18. amin例子的简单研究
  19. 使用ngxtop实时监控nginx
  20. 【内核】linux内核启动流程详细分析【转】

热门文章

  1. 201521123089 《Java程序设计》第10周学习总结
  2. JUDE-UML工具软件介绍
  3. geotrellis使用(三十三)关于Geotrellis读取Geotiff的两个细节
  4. GUI PasswordField
  5. GCD之异步同步体会
  6. python和C语言混编的几种方式
  7. 调试 ASP.NET Core 2.0 源代码
  8. SQLite中的时间日期函数
  9. 利用python生成交换机的VRF配置文件
  10. 前端页面卡顿、也许是DOM操作惹的祸?