yii操作数据库(AR)

模型:

有多少数据表,就建立多少模型

模型其实就是类

我们对数据库进行操作,需要实例化模型类,产生对象

通过对象调用相关的方法,就可以实现数据库的操作

增加记录

  1. 1 [php]
    2 $post =newPost();
    3 $post->title ="jack";
    4 $post->content ="1111111";
    5 $post->createtime = time();
    6 $post->save();

通过观察mdm项目发现在model中大多数的insert操作使用的是DAO方式,原生的insert sql语句;

在model中可以这样:

  1.  1 public function insert($id,$name)
     2 {
     3     $con = $this->dbConnection;
     4     $sql="insert into user (username,createtime) values (:username,:createtime);";
     5     $time = date("Y-m-d H:i:s");
     6     $cmd = $con->createCommand($sql);
     7     $cmd->bindParam(":username",$name,PDO::PARAM_STR);
     8     $cmd->bindParam(":createtime",$time,PDO::PARAM_STR);
     9     $cmd->execute();
    10 }

或者在controller中使用AR的较多(更多的操作方式是如下在控制器中执行,使用AR类的save()方法):

前提是,要在Model中,定义好rule,rule怎么定义,暂时还没弄明白

官方给的是如下原因:

我们可以使用attributes属性统一收集表单信息,但是数据表约束规则必须完整。

并且需要设置验证规则rules为safe,否则信息无法被attributes保存

  1.  1 public function actionInsert()
     2 {
     3     $arr = array();
     4     $array["name"]= $_GET["name"];
     5     $array["time"]= $_GET["time"];
     6     $user =newManagementUser("save");
     7     $user->attributes = $arr;
     8     $saved = $user->save();
     9     if($saved){
    10         echo ‘success‘;
    11     }else{
    12         echo ‘fail‘;
    13     }
    14 }

更新记录

一般也是在controller中更新,

  1. 1 public function actionUpdate()
    2 {
    3     $id = $_GET["id"];
    4     $policy =newDevicePolicy("update");
    5     $parray = array();
    6     $parray["name"]=‘default‘;
    7     $parray["time"]= time();
    8     $update = $policy->updateAll($parray,"id=:pid",array(":pid"=>$id));
    9 }

findByPk()使用

不实例化对象,操作数据库的方式如下:ManagementEndGroup::model()->find();

 1 public function actionModify()
 2     {
 3         $manageData = json_decode(file_get_contents("php://input"));
 4         $datarry = array();
 5         $datarry["id"] = $manageData->groupid;
 6         $datarry["name"] = $manageData->groupname;
 7         $datarry["desc"] = $manageData->groupdesc;
 8         if(isset($manageData->upgroup))
 9             $datarry["upgroup_id"] = $manageData->upgroup;
10         $manage =  ManagementEndGroup::model()->findByPk($manageData->groupid);
11         $manage->attributes = $datarry;
12         $saved = $manage->save();
13         $rslt = new stdClass();
14         $rslt->code = $saved?0:-1;
15         print_r(json_encode($rslt));
16     }  

Goods.php(模型)

    1.  1   /**
       2      * 查询商品列表(数组方式)
       3      */
       4     public function GoodsList()
       5     {
       6         $sql = "select * from sw_goods where 1=1";
       7         $result = $this->findAllBySql($sql);
       8
       9         $resultarray = array();
      10         foreach ($result as $item)
      11         {
      12             $itemarray = array();
      13             $itemarray["goods_id"] = $item["goods_id"];
      14             $itemarray["goods_name"] = $item["goods_name"];
      15             $itemarray["goods_weight"] = $item["goods_weight"];
      16             $itemarray["goods_price"] = $item["goods_price"];
      17             $itemarray["goods_number"] = $item["goods_number"];
      18             $itemarray["goods_category_id"] = $item["goods_category_id"];
      19             $itemarray["goods_brand_id"] = $item["goods_introduce"];
      20             $itemarray["goods_big_img"] = $item["goods_big_img"];
      21             $itemarray["goods_small_img"] = $item["goods_small_img"];
      22             $itemarray["goods_create_time"] = $item["goods_create_time"];
      23             $resultarray[]=$itemarray;
      24         }
      25         return $resultarray;
      26 //      print_r($resultarray);
      27     }  

GoodsController.php(控制器)

  1.  1 //商品列表页
     2 publicfunction actionCategory()
     3 {
     4 //render()带布局渲染
     5 //renderPartial()部分渲染
     6 $goods =newGoods();
     7 $goodslist = $goods->GoodsList();
     8 print_r($goodslist);
     9 $this->render(‘category‘);
    10 }

来自为知笔记(Wiz)

时间: 2024-10-22 04:45:28

yii操作数据库(AR)的相关文章

yii操作数据库(PDO)

1.数据访问对象(DAO): 执行 SQL 语句 数据库连接建立后,SQL 语句就可以通过使用 [CDbCommand] 执行了.你可以通过使用指定的SQL语句作为参数调用 [CDbConnection::createCommand()] 创建一个 [CDbCommand] 实例. [php] $connection=Yii::app()->db; // 假设你已经建立了一个 "db" 连接 // 如果没有,你可能需要显式建立一个连接: // $connection=new CD

Yii使用数据库操作

1.安装数据库 如果你是通过composer安装的话,只需要通过命令行, 需要先配置字符串,2.0在yii\common\config\main-local.php里面 <?php return [ 'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii', 'username' => 'root', 'password'

YII访问数据库(Yii Dao)

CDbConnection: 一个抽象数据库连接CDbCommand: SQL statementCDbDataReader: 匹配结果集的一行记录CDbTransaction:数据库事务 访问数据库前需要建立数据库连接:使用DAO建立一个抽象数据库链接:$connection = new CDbConnection($dsn, $username, $password);$connection->active = true;     // 只有激活了连接才可以使用// 想要关闭连接,可以这样:

ci框架操作数据库基本方法

授课过程中如果涉及到文件夹或目录时,可使用缩进进行演示: application |-----libraries |-----xxx_helper.php system |-----libraries |-----url_helper.php --------------------------------------------------------------------------------------------------------------------------------

Yii框架数据库多数据库、主从、读写分离

Yii框架数据库多数据库.主从.读写分离 实现 功能描述:1.实现主从数据库读写分离 主库:写 从库(可多个):读2.主数据库无法连接时 可设置从数据库是否 可写3.所有从数据库无法连接时 可设置主数据库是否 可读4.如果从数据库连接失败 可设置N秒内不再连接 利用yii扩展实现: <?php /**  * 主数据库 写 从数据库(可多个)读  * 实现主从数据库 读写分离 主服务器无法连接 从服务器可切换写功能  * 从务器无法连接 主服务器可切换读功  * by lmt  * */ clas

用Yii框架实现AR类自动记录日志

定义一个新的AR类MyActiveRecord并继承CActiveRecord类,然后定义日志处理事件RecordLog: public function RecordLog($objEvent) {        //记录日志操作,需要在各个类中各自实现 } 2. 在类初始化的时候为记录日志事件附加一个事件处理程序,即绑定日志记录事件: public function init() {        //绑定日记记录事件 $this->attachEventHandler('onRecordL

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

adb命令详解(二)——手机缺失sqlite3时操作数据库的多种解决方案

在android应用开发无处不在SQLite数据库的身影.那么在开发中怎么使用adb命令操作数据库的功能呢? 下面我们将完整的介绍与数据库操作相关的命令集及当手机缺少sqlite3的时候的多种解决方案. 1.当手机缺失sqlite3时,如何操作数据库 先来看看手机缺失sqlite3时候的效果图: 这个时候你想操作刚刚编写应用程序中执行的数据库文件内容,显然是执行不了sql语句的.下面我们将介绍三种方法让你可以查看应用程序下的数据库文件: ㈠向手机导入sqlite3文件 ①第一步,下载sqlite

C#编写程序操作数据库如何防止SQL注入漏洞的发生

我们在使用C# 编程的时候,经常会遇到操作数据库的地方,如果我们不注意,可能编写的代码就是下面这样 在前台定义了一个文本框,name值为btnName;  定义了一个查询按钮,name值为btnSearch,Click事件为 btnSearch_Click, private void btnSearch_Click(object sender, RoutedEventArgs e)         {             using (SqlConnection conn = new Sql