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 前一天或后一天的日期
Jun 28 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
php实现webservice实例
Nov 06 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
PHP的反射机制实例详解
Mar 29 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 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
Laravel下生成验证码的类
2017/11/15 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
js代码实现轮播图
2020/05/04 Javascript
Python程序设计入门(5)类的使用简介
2014/06/16 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
简历里的自我评价
2014/01/31 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers