laravel框架模型和数据库基础操作实例详解


Posted in PHP onJanuary 25, 2020

本文实例讲述了laravel框架模型和数据库基础操作。分享给大家供大家参考,具体如下:

laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM):

use Illuminate\Support\Facades\DB;

1.DB facade[原始查找]

$results = DB::select('select * from users where id = :id', ['id' => 1]);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

不返回值:

DB::statement('drop table users');

返回自增id:

$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);
$num=DB::delete('delete from vipinfo where vip_ID= ?',[5]);

2.查询构造器[Query Builder]

laravel查询构造器提供了方便流畅的接口,用来建立及执行数据库查找语法。使用了pdo参数绑定,使应用程序免于sql注入,因此传入的参数不需要额外转义特殊字符。基本上可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行。

(1)新增

$bool=DB::table("vipinfo")->insert(['vip_ID'=>6,'vip_name'=>'zls','vip_type'=>"出行",'vip_fenshu'=>800]);
echo $bool; //返回bool值
 //如果想得到新增的id,则使用insertGetId方法
 $id=DB::table("vipinfo")->insertGetId(['vip_ID'=>5,'vip_name'=>'wyp','vip_type'=>"出行",'vip_fenshu'=>800]);
 echo $id;
 //插入多条数据
 $bool=DB::table("vipinfo")->insert([
    ['vip_ID'=>5,'vip_name'=>'wyp','vip_type'=>"出行",'vip_fenshu'=>800],
    ['vip_ID'=>6,'vip_name'=>'zls','vip_type'=>"出行",'vip_fenshu'=>800],
]);
echo $bool; //返回bool值

(2)修改

$bool=DB::table("vipinfo")->where('vip_ID',6)->update(['vip_fenshu'=>500]);
echo $bool;
//自增
$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu");//自增1
$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu",3);//自增3
echo $bool;
//自减
$bool=DB::table("vipinfo")->where('vip_ID',6)->decrement("vip_fenshu");//自1
$bool=DB::table("vipinfo")->where('vip_ID',6)->decrement("vip_fenshu",3);//自增3
echo $bool;
//自增时再修改其他字段
$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu",3,['vip_name'=>'dbdibi']);//自增3

(3)删除

$num=DB::table("vipinfo")->where('vip_ID',6)->delete();//删除1条
$num=DB::table("vipinfo")->where('vip_ID','>',4)->delete();//删除多条
echo $num; //删除的行数
$num=DB::table("vipinfo")->truncate();//删除整表,不能恢复,谨慎使用

(4)查询

//get()返回多条数据
$student=DB::table("vipinfo")->get();
 var_dump($student); 
//first()返回1条数据
$student=DB::table("vipinfo")->first(); //结果集第一条记录
$student=DB::table("vipinfo")->orderBy('vip_ID','desc')->first();//按vip_ID倒序排序
var_dump($student); 
//where()条件查询
$student=DB::table("vipinfo")->where('vip_ID','>=',2)->get(); //一个条件  
$student=DB::table("vipinfo")->whereRaw('vip_ID> ? and vip_fenshu >= ?',[2,300])->get(); //多个条件
dd($student);
//pluck()指定字段,后面不加get
$student=DB::table("vipinfo")->pluck('vip_name');
dd($student);
//lists()指定字段,可以指定某个字段作为下标
$student=DB::table("vipinfo")->lists('vip_name','vip_ID');  //指定vip_ID为下标
dd($student);
$student=DB::table("vipinfo")->lists('vip_name');  //不指定下标,默认下标从0开始
//select()指定某个字段
$student=DB::table("vipinfo")->select('vip_name','vip_ID')->get();
dd($student);
//chunk()每次查n条
$student=DB::table("vipinfo")->chunk(2,function($students){ //每次查2条
  var_dump($students);
  if(.......) return false; //在满足某个条件下使用return就不会再往下查了
});

使用聚合函数

//count()统计记录条数
$nums=DB::table("vipinfo")->count();
echo $nums;
//max()某个字段的最大值,同理min是最小值
$max=DB::table("vipinfo")->max("vip_fenshu");
echo $max;
//avg()某个字段的平均值
$avg=DB::table("vipinfo")->avg("vip_fenshu");
echo $avg;
//sum()某个字段的和
$sum=DB::table("vipinfo")->sum("vip_fenshu");
echo $sum;

3.Eloquent ORM

1.简介、模型的建立及查询数据

简介:laravel所自带的Eloquent ORM 是一个ActiveRecord实现,用于数据库操作。每个数据表都有一个与之对应的模型,用于数据表交互。

建立模型,在app目录下建立一个Student模型,即Student.php,不需要带任何后缀。

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
//指定表名
protected $table= 'vipinfo';
//指定主键
protected $primaryKey= 'vip_ID';
//关闭laravel自带更新created_at,updated_at,deleted_at的操作
protected $timestamps= false;
//录入字段名
protected $fillable= ['id','name'];
}

在Student控制器里增加一个test3方法,配置路由

Route::get('test3',['uses'=>'StudentController@test3']);
public function test3(){
// all()方法查询所有数据
$studnets=Student::all();
dd($studnets);
//find()查询一条,依据主键查询。findOrFail()查找不存在的记录时会抛出异常
$student=Student::find(5); //主键为5的记录
var_dump($student['attributes']);
//查询构造器的使用,省略了指定表名
$student=Student::get(); 
var_dump($student);
}

2 . 新增数据、自定义时间戳、批量赋值

(1)使用save方法新增

laravel会默认维护created_at,updated_at 两个字段,这两个字段都是存储时间戳,整型11位的,因此使用时需要在数据库添加这两个字段。如果不需要这个功能,只需要在模型里加一个属性:public $timestamps=false; 以及一个方法,可以将当前时间戳存到数据库

protected function getDateFormat(){
  return time();
}

这样就不需要那两个字段了。

控制器里写:

$student=new Student();
//设定数据
$student->vip_name='xiaoming';
$student->vip_type='出行';
$student->vip_fenshu=900;
$bool=$student->save(); //保存
echo $bool;

从数据库里取得某条记录的时间戳时,默认取得的是按日期格式化好的时间戳,如果想取得原本的时间戳,则在模型里增加asDateTime方法。

protected function asDateTime($val){
  return $val;
}

(2)使用create方法新增时,需要在模型里增加:

protected $fillable=['vip_name','vip_fenshu','vip_type'];  //允许批量赋值的字段

控制器里写:

Student::create(['vip_name'=>'mmm','vip_fenshu'=>999,'vip_type'=>'出行']);

这样即可新增成功!

(3)firstOrCreate()以属性查找记录,若没有则新增

$student=Student::firstOrCreate(['vip_name'=>'mmm']);
echo $student;

(4)firstOrNew()以属性查找记录,若没有则会创建新的实例。若需要保存,则自己调用save方法()

$student=Student::firstOrNew(['vip_name'=>'mmm']);
$student->save();
echo $student;

3.  修改数据

使用save方法更新模型

使用update方法更新数据(和create相对应的,Eloquent模型类还支持使用update方法更新数据,同样要用到批量赋值)

//通过模型更新数据
$student=Student::find(2);
$student->vip_fenshu=10000;
$student->save(); //返回bool值
//通过查询构造器更新
$num=Student::where('vip_ID','>',2)->update(['vip_fenshu'=>2000]);
echo $num; //返回更新的行数

4.  删除数据

//(1)通过模型删除数据
$student=Student::find(11);
$student->delete(); //返回bool值
//(2)通过主键删除
$num=Student::destroy(10); //删除主键为10的一条记录
echo $num; //返回删除的行数
$num=Student::destroy(10,5); //删除多条 或者$num=Student::destroy([10,5]);
echo $num; //返回删除的行数

视频资源学习参考:http://www.imooc.com/learn/697

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
编写PHP的安全策略
Oct 09 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP+MySQL投票系统的设计和实现分享
Sep 23 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
Laravel 实现数据软删除功能
Aug 21 PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 #PHP
laravel框架中间件简单使用方法示例
Jan 25 #PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 #PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 #PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 #PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 #PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 #PHP
You might like
简化php模板页面中分页代码的解析
2009/02/06 PHP
php 伪静态之IIS篇
2014/06/02 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
js使用eval解析json(js中使用json)
2014/01/17 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python创建子类的方法分析
2019/11/28 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
自学考试自我鉴定范文
2013/09/26 职场文书
趣味运动会活动方案
2014/02/12 职场文书
工作失误检讨书
2015/01/26 职场文书
关于长城的导游词
2015/01/30 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL