Yii框架开发商城(四)
2014-03-31 02:21
218 查看
Yii 框架下的数据库操作....
MVC 框架 [ Medol View Controller]
建立数据库,数据表,写测试数据....... Yii 框架下操作数据库注意要打开php对PDO的扩展...因为Yii操作数据库底层就使用的是PDO
一、在主配置文件 main.php 中配置数据库连接
ok,连接上数据库,我建个名字是 yiishop 的数据库,在数据库中建一个 sw_goods 商品表
新建商品数据表,sw_goods
测试下Yii框架是否能连接上数据库.....
在控制器里随便一个地方输出信息 var_dump(Yii::app()->db); 括号内的意思是获得数据库组件,Yii::app() 这个可以理解为实例化了一个类的对象...
我写在 UserController.php 中的actionLogin() 方法中...访问一下, 看到 object(CDb Connection) ...... 说明连接成功
二、操作数据库(CRUD)
重点......
在MVC的设计模式中,操作数据库应该在model层,所以在model没创建之前,不要去操作数据库,操作数据库的动作应在写在model中......
有多少数据表,就创建多少模型,对数据库进行操作,需要实例化模型类,产生对象,通过对象调用对应的方法实现操作数据库
每一个model 就是一个类文件,每一个model对应一个数据表,--- 建立一个model,名字是goods [对应 sw_goods 数据表]
model 中有很多属性,每一个属性对应数据表里面的字段.....[谨记严格遵守这种开发设计模式,养成好的习惯]
model 模型创建出来的一个对象就是数据表中的一条记录
1. 在 /shop/protected/models/ 目录下创建 Goods.php 继承固定的父类 CActiveRecord
模型里面有两个方法,缺一不可.... model() 静态方法可以创建一个模型的对象 tableName()方法 返回当前数据表的名称....
return ‘{{goods}}’; 这种写法是为了防止以后有需求要改动数据表名称前缀,避免大量的重复操作,采用设置数据表前缀关联的方法
在主配置文件 main.php 中设置数据表的前缀 .... 在 ‘db’ 下添加前缀配置
问题:db实际是从哪来?
首先...在 Yii核心目录 framework 下 Web/目录下的 CWebApplication.php 文件中搜索 db.... 木有发现.....
接着...在Yii 核心目录framework 下 base 目录下的 CApplication.php 文件中搜索db ...... ok, 找到了....
然后再 Yii核心目录 framework 下的 YiiBase.php 文件中搜索 CDbConnection ...ok.找到下面语句
打开/framework/db/下的 CDbConnection.php 文件,看到有很多属性,这些属性正是在 主配置文件 main.php 中的 ‘db’ 下可以配置的字段
找到前缀属性 tablePrefix , 并在main.php 中配置数据表前缀 ‘tablePrefix’=> 'sw_',
2.在后台实现商品信息的查询
后台会自动调用前台的model,公用一个model,代码复用性.....所以在后台的GoodsController.php中的actionShow()方法中直接通过类名调用 Goods::model();
$goods_model = Goods::model();
解释:model固定继承了 CActiveRecord 类
CActiveRecord 是活跃记录,AR,在很多成熟的框架里面都有这个技术. 将数据表的相关内容以 ‘类’ 的形式呈现出来....
CActiveRecord中有很多方法可以操作数据库......各种find
$goods_info = $goods_model->find(); 打印 var_dump($goods_info); 使用find()方法每次查询只查询一条语句
$goods_info 得到的是数据表中的一条记录对应的model对象,要想获得具体的字段值可以用 $goods_info->‘属性’ 即可...
findAll() 方法获得的是一个数组,数组里面是数据表里所有的记录对应的model对象信息
在主配置文件 main.php 中打开 Log配置信息,可以显示程序的运行日志和具体的sql语句
3.数据信息展示到视图模板中....
renderPartial('视图名字', '传递的变量信息');
在GoodsController中的actionShow方法中, $this->renderPartial('show', $goods_info); 将商品信息传递到视图模板里面
在视图模板中删除假数据,遍历获得的信息,展示
ok,搞定了
4.通过model模型实现数据添加
在控制器实例化模型对象,对其初始化数据,通过save()方法,可以添加信息到数据库中
注意:普通情况下,日志信息看到的sql添加语句并不会显示具体的值,都是用参数代替,这是预编译的效果,如果想在日志信息中看到sql语句中具体的值
可在主配置文件 main.php 下配置db ‘enableParamLogging’ => ‘true’ ok,这样就可以了
主要还是写一下Yii框架下怎么从页面表单添加数据到数据库
利用助手进行表单展现.... 【助手:利用php程序生成html代码,Yii中的小物件,widget】
<?php $form = $this->beginWidget('CActiveForm'); ?> 替换html中的 form 开始标签
<?php $this->endWidget(); ?> 替换 html 中的 form 结束标签
<?php echo $form->labelEx($goods_model,'goods_name')?> 替换label标签
<?php echo $form->textField($goods_model,'goods_name'); ?> 替换 html 中的 input 标签
注:所有的替换表单域段都在 Web/widget/CActiveForm.php 文件中能找到对应的方法 这里的$this 代表控制器,$form为获取到的小物件, $goods_model 是对应的模型实例
ok,创建完后校验一下....
刷新访问一下,查看网页源代码,会看到生成的表单代码......
这就是用小物件生成的表带
ok (后续....... )
MVC 框架 [ Medol View Controller]
建立数据库,数据表,写测试数据....... Yii 框架下操作数据库注意要打开php对PDO的扩展...因为Yii操作数据库底层就使用的是PDO
一、在主配置文件 main.php 中配置数据库连接
ok,连接上数据库,我建个名字是 yiishop 的数据库,在数据库中建一个 sw_goods 商品表
新建商品数据表,sw_goods
mysql> use yiishop; Database changed mysql> DROP TABLE IF EXISTS `sw_goods`; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> CREATE TABLE `sw_goods` ( -> `goods_id` int(11) NOT NULL auto_increment COMMENT '自增id', -> `goods_name` varchar(128) collate utf8_unicode_ci NOT NULL COMMENT '名字', -> `goods_weight` int(11) NOT NULL COMMENT '重量', -> `goods_price` float NOT NULL COMMENT '价格', -> `goods_number` int(11) NOT NULL COMMENT '商品库存数量', -> `goods_category_id` int(11) NOT NULL COMMENT '商品分类', -> `goods_brand_id` int(11) NOT NULL COMMENT '商品品牌', -> `goods_introduce` text collate utf8_unicode_ci NOT NULL COMMENT '介绍', -> `goods_big_img` varchar(128) collate utf8_unicode_ci NOT NULL COMMENT '图片', -> `goods_small_img` varchar(128) collate utf8_unicode_ci NOT NULL COMMENT '缩略图', -> `goods_mark` int(11) NOT NULL COMMENT '标志', -> `goods_create_time` datetime NOT NULL COMMENT '上线时间', -> PRIMARY KEY (`goods_id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品表'; Query OK, 0 rows affected (0.36 sec)
测试下Yii框架是否能连接上数据库.....
在控制器里随便一个地方输出信息 var_dump(Yii::app()->db); 括号内的意思是获得数据库组件,Yii::app() 这个可以理解为实例化了一个类的对象...
我写在 UserController.php 中的actionLogin() 方法中...访问一下, 看到 object(CDb Connection) ...... 说明连接成功
二、操作数据库(CRUD)
重点......
在MVC的设计模式中,操作数据库应该在model层,所以在model没创建之前,不要去操作数据库,操作数据库的动作应在写在model中......
有多少数据表,就创建多少模型,对数据库进行操作,需要实例化模型类,产生对象,通过对象调用对应的方法实现操作数据库
每一个model 就是一个类文件,每一个model对应一个数据表,--- 建立一个model,名字是goods [对应 sw_goods 数据表]
model 中有很多属性,每一个属性对应数据表里面的字段.....[谨记严格遵守这种开发设计模式,养成好的习惯]
model 模型创建出来的一个对象就是数据表中的一条记录
1. 在 /shop/protected/models/ 目录下创建 Goods.php 继承固定的父类 CActiveRecord
模型里面有两个方法,缺一不可.... model() 静态方法可以创建一个模型的对象 tableName()方法 返回当前数据表的名称....
<?php 2 3 /** 4 *商品模型 5 *@since 2014-03-30 6 *@auther jwz 7 */ 8 class Goods extends CActiveRecord{ 9 10 //返回一个模型对象,是必不可少的一个方法 11 public static function model($className = __CLASS__){ 12 13 return parent::model($className); 14 } 15 16 //返回当数据表的名字,也是一个必不可少的方法 17 public function tableName(){ 18 19 //return 'sw_goods'; 20 return '{{goods}}'; 21 } 22 } 23 24 ?>
return ‘{{goods}}’; 这种写法是为了防止以后有需求要改动数据表名称前缀,避免大量的重复操作,采用设置数据表前缀关联的方法
在主配置文件 main.php 中设置数据表的前缀 .... 在 ‘db’ 下添加前缀配置
问题:db实际是从哪来?
首先...在 Yii核心目录 framework 下 Web/目录下的 CWebApplication.php 文件中搜索 db.... 木有发现.....
接着...在Yii 核心目录framework 下 base 目录下的 CApplication.php 文件中搜索db ...... ok, 找到了....
'db'=>array( 'class'=>'CDbConnection', ),这里定义了一个类名... CDbConnection
然后再 Yii核心目录 framework 下的 YiiBase.php 文件中搜索 CDbConnection ...ok.找到下面语句
'CDbConnection' =>'/db/CDbConnection.php',OK..找到了db从哪来的了......或者可以从framework/yiilite.php 文件中搜索查找,这个文件整合了Yii框架所有的核心代码,共10000多行
打开/framework/db/下的 CDbConnection.php 文件,看到有很多属性,这些属性正是在 主配置文件 main.php 中的 ‘db’ 下可以配置的字段
找到前缀属性 tablePrefix , 并在main.php 中配置数据表前缀 ‘tablePrefix’=> 'sw_',
2.在后台实现商品信息的查询
后台会自动调用前台的model,公用一个model,代码复用性.....所以在后台的GoodsController.php中的actionShow()方法中直接通过类名调用 Goods::model();
$goods_model = Goods::model();
解释:model固定继承了 CActiveRecord 类
CActiveRecord 是活跃记录,AR,在很多成熟的框架里面都有这个技术. 将数据表的相关内容以 ‘类’ 的形式呈现出来....
CActiveRecord中有很多方法可以操作数据库......各种find
$goods_info = $goods_model->find(); 打印 var_dump($goods_info); 使用find()方法每次查询只查询一条语句
$goods_info 得到的是数据表中的一条记录对应的model对象,要想获得具体的字段值可以用 $goods_info->‘属性’ 即可...
findAll() 方法获得的是一个数组,数组里面是数据表里所有的记录对应的model对象信息
在主配置文件 main.php 中打开 Log配置信息,可以显示程序的运行日志和具体的sql语句
3.数据信息展示到视图模板中....
renderPartial('视图名字', '传递的变量信息');
在GoodsController中的actionShow方法中, $this->renderPartial('show', $goods_info); 将商品信息传递到视图模板里面
在视图模板中删除假数据,遍历获得的信息,展示
48 <?php 49 //遍历从GoodsController传递过来的数据 50 foreach($goods_info as $good){ 51 ?> 52 <tr id="product1"> 53 <td><?php echo $good->goods_id;?></td> 54 <td><a href="#"><?php echo $good->goods_name;?></a></td> 55 <td><?php echo $good->goods_number;?></td> 56 <td><?php echo $good->goods_price;?></td> 57 <td><img src="<?php echo $good->goods_big_img;?>" height="60" width="60"></td> 58 <td><img src="<?php echo $good->goods_small_img;?>" height="40" width="40"></td> 59 <td><?php echo $good->goods_brand_id;?></td> 60 <td><?php echo $good->goods_create_time;?></td> 61 <td><a href="#">修改</a></td> 62 <td><a href="javascript:;" onclick="delete_product(1)">删除</a></td> 63 </tr> 64 65 <?php 66 } 67 ?>
ok,搞定了
4.通过model模型实现数据添加
在控制器实例化模型对象,对其初始化数据,通过save()方法,可以添加信息到数据库中
注意:普通情况下,日志信息看到的sql添加语句并不会显示具体的值,都是用参数代替,这是预编译的效果,如果想在日志信息中看到sql语句中具体的值
可在主配置文件 main.php 下配置db ‘enableParamLogging’ => ‘true’ ok,这样就可以了
主要还是写一下Yii框架下怎么从页面表单添加数据到数据库
利用助手进行表单展现.... 【助手:利用php程序生成html代码,Yii中的小物件,widget】
<?php $form = $this->beginWidget('CActiveForm'); ?> 替换html中的 form 开始标签
<?php $this->endWidget(); ?> 替换 html 中的 form 结束标签
<?php echo $form->labelEx($goods_model,'goods_name')?> 替换label标签
<?php echo $form->textField($goods_model,'goods_name'); ?> 替换 html 中的 input 标签
注:所有的替换表单域段都在 Web/widget/CActiveForm.php 文件中能找到对应的方法 这里的$this 代表控制器,$form为获取到的小物件, $goods_model 是对应的模型实例
ok,创建完后校验一下....
刷新访问一下,查看网页源代码,会看到生成的表单代码......
<td><label for="Goods_goods_name">Goods Name</label></td> <td> <input name="Goods[goods_name]" id="Goods_goods_name" type="text" /> </td>
这就是用小物件生成的表带
ok (后续....... )
相关文章推荐
- Yii框架开发商城(三)
- Yii框架开发商城(五)
- Yii框架开发商城(二)
- 第一天ci框架开发商城1
- 列举PHP的Yii 2框架的开发优势
- 使用Yii框架开发的多子域名共享登录信息
- php的yii框架开发总结9
- YinCart 基于Yii框架开源商城!可快速构建自己的网店!
- 第一天ci框架开发商城2
- 安装配置pear、phpunit、Selenium(netbeans下开发yii框架项目)
- Yii框架开发问题总结
- RESTFUL及Yii框架下开发RESTFUL的细节
- php的yii框架开发总结5
- php开发--yii2框架内错误调试总结
- 开源B2B2C WSTMart商城系统开发框架及插件介绍
- 关于使用Yii框架开发时数据库增加字段后保存无效的问题
- php设置报错级别,项目后台使用YII框架开发
- php开发 yii框架
- yii框架多项目共享在服务器和本地开发环境部署的一致性
- 【备忘】php 高性能yii2框架开发高性能高可用负载均衡集群架构商城视频教程