什么是模型(Model)
模型是MVC模式中的一部分,是表现业务数据、业务规则和逻辑的对象。
YII应用参照模型-视图-控制器(MVC)设计模式来组织。模型代表数据、业务逻辑和规则;视图展示模型的输出;
控制器接受出入并将其转换为模型和视图命令。
除了MVC,Yii应用还有以下部分:
入口脚本:终端用户能直接访问的PHP脚本,负责启动一个请求处理周期。
应用:能全局范围内访问的对象,管理协调组件来完成请求。
应用组件:在应用中注册的对象,提供不同的功能来完成请求。
模块(Module):是包含完整MVC结构的独立包,一个应用可以由多个模块组成。
过滤器:控制器在处理请求之前或之后需要触发执行的代码。
小部件:可嵌入到视图中的对象,可包含控制器逻辑,可被不同视图重复调用。
Yii如何使用数据库
1.Yii如何使用数据库 Yii通过数据库访问对象(Database Access Objects,简称DAO)来使用数据库 。
DAO建立在"PHP数据对象(PDO)"之上,并提供了一套面向对象的API来访问数据库。
2.数据库的连接 数据库的连接通常放到配置文件中
这里表示会创建一个 yii/db/Connection对象,并用这个对象来访问数据库。 这个数据库连接对象的写法:Yii::$app->db
model 模型继承 ActiveRecord类
1、一个AR类关联一张数据表,每个AR对象对应表中的一行
2、AR对象的属性,对应为数据行的列
$model = Post::findOne(1);
echo $model->id;
echo $mode->title;
$models = Post::findAll(['status' => 1,]);
foreach($models as $item)
{
echo $item->id;
echo $item->title.'<br>';
}
3、可以直接以面向对象的方式来操纵数据表中的数据, 这样就不需要写SQL语句就能实现数据库的访问。
操作数据CRUD
AR提供下面这些方法来实现插入、更新和删除等功能:
yii\db\ActiveRecord::insert()
yii\db\ActiveRecord::update()
yii\db\ActiveRecord::delete()
yii\db\ActiveRecord::save()
Create 方法
$customer = new Customer();
$customer ->name = 'James';
$customer ->email = 'james@example.com';
$customer->save();
Read 方法
$customer = Customer::findOne($id);
Update 方法
$customer = Customer::findOne($id);
$customer->email = 'james@example.com';
$customer->save();
Delete 方法
$customer = Customer::findOne($id);
$customer->delete();
小部件
Yii提供了一套数据小部件widgets,这些小部件可以用于显示数据、
DetailView小部件用于显示一条记录数据。
ListView和GridView小部件能够用于显示一个拥有分页、排序和过滤功能的一个列表或者表格。
4.3章节
hasOne、hasMany查询关联的数据
ActiveRecord类通过hasOne或者hasMany方法来建立两个表的关联关系。
hasOne用于多对一,一对一的情况;
hasMany用于一对多的情况。
建立关联关系后,就可以像访问自己的列数据一样便捷地区访问关联表的数据。
表单 ActiveForm 它能把模型和表单结合在一起,简化了表单input元素的html代码编写, 还充分利用了模型的数据规则,极大的减轻了表单开发的工作量,同时让表单代码的 可读性和可维护性大大提高。
ActiveField对象的使用
<?=$form->field($model,'password')->passwordInput()?>
额外的标签的处理 表单中,存在一些和模型对象没有关系的、额外的HTML标签,比如submitButton我们可以 *使用纯HTML *使用yii\helpers\Html帮助类中的方法来添加到表单中
查询构建器 QueryBuilder
什么是查询构建器? 查询构建器也是建立在DAO基础之上,可让你创建程序化的、DBMS无关的SQL语句, 并且,这样创建的SQL语句,比原生的SQL语句更易读、更安全。
$query->where("status=$status"); //不安全写法 特别是数据是用户提交时
$query->where('status=:status')->addParams([':status' =? $status]);//正确安全的写法
执行更新或新增数据方法不成功 打印错误
$user->save(); VarDumper::dump($user->errors);exit(0);