ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] 可以通过集成yii\base\Model或者他的子类定义模型类 支持许多实用特性: * 属性: 表现业务数据,可以像普通类属性或者数组一样被访问 * 属性标签: 指定属性显示出来的标签 * 块赋值:支持一步给许多属性赋值 * 验证规则: 确保输入数据符合所声明的验证规则 * 数据导出:允许模型数据导出为自定义格式的数组 Model类也是更多高级模型如`Active Record`活动记录的基类 Model中方法 rules是验证规则,哪些属性用到哪些规则 attributeLabels是属性中在页面上显示什么,不指定用属性名 --- \[\[yii\\base\\Model\]\] 被用于普通模型类的父类并与数据表\*\*无关\*\*。\[\[yii\\db\\ActiveRecord\]\] 通常是普通模型类的父类但与数据表有关联(译者注:\[\[yii\\db\\ActiveRecord\]\] 类其实也是继承自 \[\[yii\\base\\Model\]\],增加了数据库处理 --- # 模型方法简介 ---- 分批次查询(结果已经是array) ~~~ foreach (Goods::find()->batch(2) as $v) { var_dump($v); } ~~~ 单表查询 one获取一条记录, 快捷方法findOne和findAll ~~~ Country::find()->where(['>', 'id', 1])->all(); Country::find()->where(['between', 'id', 1, 10])->all(); Country::find()->where(['like', 'title', 'xxx'])->all(); ~~~ --- # 关联查询hasMany ![](https://box.kancloud.cn/ea7ea0de883b8f3de9a941d6954c03aa_1318x236.png) 变为数组的话 ~~~ $res = $goods->hasMany(Cate::className(), ['goods_id' => 'id'])->asArray()->all(); ~~~ yii有_get,方法加上getXxx,然后控制器模型->方法(不加get) --- # with查询 先确保 表 有对应方法 ~~~ public function getCate() { return $this->hasMany(Cate::className(), ['goods_id' => 'id']); } ~~~ 在控制器中 ~~~ public function actionIndex() { $res = Goods::find()->with('cate')->asArray()->all(); echo '<pre>'; var_dump($res); die; } ~~~ with类似于 ~~~ SELECT * FROM `topic` SELECT * FROM `comment` WHERE `topic_id` IN (1, 2, 3, 4, 5) ~~~ # joinWith() ~~~ Goods::find()->joinwith('cate')->asArray()->all(); ~~~ ~~~ // 输出的 SQL SELECT `topic`.* FROM `topic` LEFT JOIN `comment` ON `topic`.`id` = `comment`.`topic_id` ~~~ # load load可以加载$POST数据,但是post数据下标必须和model类名一致的 例如`Article::load($_POST)`等于加载`$_POST['Article']`里面的数据,另外load的字段必须出现在rules方法的数组中,不然也无法直接赋值 ![](https://box.kancloud.cn/6a82d61a0a07db5451d9ffee281cfb63_450x359.png) # 验证规则 rules验证规则是在model调用validate()时候调用的 rules有22种验证规则,常用有以下几种 ![](https://box.kancloud.cn/0607747124225a78f83c64d7914dd5c4_851x476.png) ![](https://box.kancloud.cn/96ab9a4d83666f70b5bb228daca30c44_861x713.png) ![](https://box.kancloud.cn/dc1dd5c1deda67b95c4534f40c0ac3df_479x260.png) 自定义 ![](https://box.kancloud.cn/43c76e30c47642d18a141c929cf9cbcc_1219x415.png)