YII2框架学习 基础篇(二) YII2数据库操作

本文介绍了如何使用YII框架进行数据库操作,包括连接配置、数据模型建立、控制器中实现增删改查等功能,并演示了关联查询的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际项目中PHP肯定离不开数据库,YII框架有很多针对数据库的操作,学习一下。学习YII框架数据库指令的同时,也可以学到YII框架的数据模型,一石二鸟啊。另外,昨天发布了第一篇后,发现有几十个人看了我的http://blog.youkuaiyun.com/m0_37645820/article/details/72855543,YII2框架学习 基础篇(一)。自己看了看,排版太差了,以后好好写。
1.xmapp建数据库
因为是用的xampp建站,这次用的数据库是**mysql**,先在xampp把mysql打开。打开后进到http://localhost/phpmyadmin/,就可以看见数据库了。在mysql新建库名为yii,新建表名为test,表头为id和name,然后随便输入点数据就行了,准备工作完毕。
2.修改yii数据库配置
然后需要修改一下config文件夹下db.php文件里面的dsn值为'dsn' => 'mysql:host=localhost;dbname=yii'。这样yii框架就可以使用刚刚建好的数据库了
3.编写数据模型

在models下新建php文件名为Test,新建\yii\db\ActiveRecord子类Test。

namespace app\models;
use yii\db\ActiveRecord;
class Test extends \yii\db\ActiveRecord{

}
这样数据模型就建好了。接下来可以在控制器里面调用。
4.控制器调用数据库操作。
其实yii框架调用数据库操作的过程可以用一句话来说明,就是把数据从表里面拿出来放到对象里面,通过对象的方法来达到对数据库的操作。 
先说说查找,等下再说增删改。比如我要查找数据库里面id在1和9之间的数据,就可以调用刚刚建的Test类的find方法,查找

Test::find()->where(['between','id',1,9])->asArray()->all();
注意,此处的asArray作用是把取出来的对象转化成数组,这么做是为了节省内存。同时,还有一种办法可以节省内存,因为之前说过了,把数据从表里面拿出来放到对象里面,

通过对象的方法来达到对数据库的操作。asArray把结果变成数组,就无法操作了,此时可以通过php中最常用的foreach达到效果。

此外,yii还提供很多查询方式,比如like之类的,有兴趣的可以上www.yiichina.com里面有中文文档,很有用。下面列举一些我练手的时候写的代码

	//$sql = 'select * from test where id=:id';
        //$res = Test::findBySql($sql,array(':id'=>''))->all();
       /* $res = Test::find()->where(['id'=>8])->all();*/
       /* $res = Test::find()->where(['>','id',7])->all();*/
        /*$res = Test::find()->where(['between','id',7,9])->all();*/
        /*        $res = Test::find()->where(['like','title','e'])->all();*/
        //$res = Test::find()->where(['between','id',1,9])->asArray()->all();
接下讲增,先新建Test对象,写入id和name属性,然后调用save方法。就可以了。

        $test = new Test;
        $test->id ='4';
        $test->title = 'baa';
        $test->save();

然而,在实际使用中,用户可能输入超出长度之类的违法输入,这个时候,前面建的数据模型就真正派上用场了。在model下的test.php,Test类里面加入rules方法

public function  rules(){
        return[
            ['id','integer'],
            ['title','string','length'=>[0,5]]
        ];
}
同时,刚刚在控制器写入的代码也要修改

$test = new Test;
        $test->id ='4';
        $test->title = 'baa';
        $test->validate();
        if($test->hasErrors()){
            echo 'error';
            die;
        }
        $test->save();
这样我们就可以对输入进行验证了,是不是很方便。

改的话,和增类似,不过是把新建对象变成查找。也可以加输入验证。

	$res = Test::find()->where(['id'=>4])->one();
        $res->title = 'qwqq';
        $res->save();
删太简单了,就顺便讲个yii很实用的功能。为了防止用户在输入搞鬼,自加条件,如输入id为0||0=0查找;那么肯定是会全部通过的,全部数据库就暴露了。这种时候,

可以用yii的技巧。比如删除id>0的数据,可以这么写

Test::deleteAll('id>:id',array(':id'=>'0'));

最后讲一个高级点的东西,关联查询,就是两个表关联查询。比如我有一个顾客列表customer,订单列表orders。就可以通过关联查询得知顾客列表中的顾客在订单列表中的订单。现在数据库中建这两个表。customer有id,name项。orders有id,c_id(对应顾客id)和price项。

	$customer = Customer::find()->where(['name'=>'zhangsan'])->one();
        $orders = $customer->hasMany('app\models\Order',['c_id'=>'id'])->asArray()->all();
        $orders = $customer->getOrders();
        $orders = $customer->orders;//访问一个不存在的属性时,
        print_r($orders);

其中 $customer->hasMany('app\models\Order',['c_id'=>'id'])->asArray()->all();可以放到数据模型。就不写了。
终于把基础的基础讲完了。预告,下周学习高效篇。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值