IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Laravel之数据库操作与Eloquent模型使用总结 -> 正文阅读

[大数据]Laravel之数据库操作与Eloquent模型使用总结

数据库操作
执?原?SQL
1 // 查询
2 $emp = DB :: select ( 'select * from employees where emp_no = 1' );
3 $emp = DB :: select ( 'select * from employees where emp_no = ? and gender = ?' ,
[ 1 , 'M' ]);
4 $emp = DB :: select ( 'select * from employees where emp_no = :empNo and gender =
:gender' ,[ 'empNo' => 1 , 'gender' => 'M' ]);
5 // 插?
6 DB :: insert ( 'insert into employees(first_name,last_name) values(?,?,?)' ,
[ 'Jack' , 'Ma' ]);
7 // 更新,返回受影响的?数
8 $affected = DB :: update ( 'update employees set gender = ? where emp_no = ?' ,
[ 'M' , 123 ]);
9 // 删除,返回被删除的?数
10 $deleted = DB :: delete ( 'delete from employees where first_name = ?' ,[ 'Jack' ]);
11 // 运?通?语句,不返回任何值
12 DB :: statement ( 'drop table employees' );
事务
1 // 如果事务闭包中抛出异常,事务将会?动回滚;如果闭包执?成功,事务将会?动提交:
2 DB :: transaction ( function (){
3 DB :: insert ( 'insert into employees(first_name,last_name) values(?,?,?)' ,
[ 'Jack' , 'Ma' ]);
4 $affected = DB :: update ( 'update employees set gender = ? where emp_no = ?' ,
[ 'M' , 123 ]);
5 });
6 // ?动开启事务
7 DB :: beginTransaction ();
8 // ?动回滚
9 DB :: rollBack ();
10 // ?动提交
11 DB :: commit (); 查询构建器
table()
通过DB??的table()函数来获取?个查询构建器实例。
get()
1 $emps = DB :: table ( 'employees' ). get ();
返回包含结果集额的Illuminate\Support\Collection,其中每?个结果都是 PHP 的 StdClass 对象实
fifirst()
1 $emp = DB :: table ( 'employees' ) -> first ();
从数据表中获取??数据
value()
1 $values = DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , 499995 ) -
> value ( 'first_name' );
只获取第?条结果的某?列的数据
pluck()
与value类似,但是返回所有符合条件的记录列数组。
chunk()
1 DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , 499980 ) -> orderby ( 'emp_no' ) -
> chunk ( 10 , function ( $emps ){
2 foreach ( $emps as $emp ) {
3 echo $emp -> first_name . '<br>' ;
4 }
5 });
将查询结果分块在回调函数中进?处理。
聚合函数 1 //count()
2 $result = DB:: table ( 'employees' ) -> where ( 'emp_no' , '>=' , 499980 ) -> count ();
3 //max()
4 $result = DB:: table ( 'salaries' ) -> max ( 'salary' );
5 //min()
6 $result = DB:: table ( 'salaries' ) -> min ( 'salary' );
7 //sum()
8 $result = DB:: table ( 'salaries' ) -> where ( 'emp_no' , '>=' , 499980 ) -> sum ( 'salary' );
9 //avg()
10 $result = DB:: table ( 'salaries' ) -> where ( 'emp_no' , '>=' , 499980 ) -> avg ( 'salary' );
exists()、doesntExist
1 $result = DB :: table ( 'employees' ) -> where ( 'emp_no' , '=' , '500000' ) -> exists ();
2 $result = DB :: table ( 'employees' ) -> where ( 'emp_no' , '=' , '500000' ) -> doesntExist ();
判断结果是否存在或不存在
select(),andSelect()
1 $result = DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , '499980' ) -
> select ( 'first_name' , 'last_name' ) -> get ();
2 // 上?的查询等同于:
3 $query = DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , '499980' ) -
> select ( 'first_name' );
4 $result = $query -> andSelect ( 'last_name' ) -> get ();
指定查询的列
distinct()
1 $result = DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , '499980' ) -
> select ( 'first_name' , 'last_name' ) -> distinct () -> get ();
过滤重复结果
原?语句
1 DB :: Raw () 2 $result = DB :: table ( 'employees' ) -> select ( DB :: raw ( 'count(1) as num' )) -
> where ( 'emp_no' , '>=' , 499980 ' ) -> get ();
whereRaw()
1 $result = DB :: table ( 'employees' ) -> select ( DB :: raw ( 'count(1) as num' )) -
> whereRaw ( 'emp_no>=?' ,[ 499980 ]) -> get ();
此外还有orWhereRaw(),havingRaw(),orhavingRaw(),orderByRaw()
Join
join
1 $result = DB :: table ( 'employees' ) -
> join ( 'salaries' , 'employees.emp_no' , '=' , 'salaries.emp_no' ) -
> where ( 'employees.emp_no' , '>=' , '499980' ) -> get ();
leftJoin,rightJoin类似。
crossJoin():?成?个笛卡尔积
1 $users = DB :: table ( 'sizes' )
2 -> crossJoin ( 'colours' )
3 -> get ();
?级连接
1 $result = DB :: table ( 'employees' ) -> join ( 'salaries' , function ( $join ){
2 $join -> on ( 'employees.emp_no' , '=' , 'salaries.emp_no' ) -
> where ( 'employees.emp_no' , '>=' , '499980' );
3 }) -> get ();
join函数的第?个参数为?个闭包,该闭包将会接收?个 JoinClause 对象?于指定 join ?句约束。
?查询连接
1 $salaryQ = DB :: table ( 'salaries' ) -> where ( 'emp_no' , '>=' , '499980' );
2 $result = DB :: table ( 'employees' ) -> joinSub ( $salaryQ , 'salaries' , function ( $join ){
3 $join -> on ( 'employees.emp_no' , '=' , 'salaries.emp_no' );
4 }) -> get ();
5 return $result ; 可以使? joinSub、leftJoinSub 和 rightJoinSub ?法将查询和?个?查询进?连接,每个?法都接收
三个参数 —— ?查询、表别名和定义关联字段的闭包
Union
1 $emps = DB :: table ( 'employees' ) -> whereRaw ( 'emp_no between 499980 and 499990' );
2 $result = DB :: table ( 'employees' ) -> whereRaw ( 'emp_no > 499990' ) -> union ( $emps1 ) -
> get ();
Where ?句
简单where?句
1 // 添加?个条件
2 DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , '499980' );
3 // 添加多个条件 , 传?维数组
4 DB :: table ( 'employees' ) -> where ([
5 [ 'emp_no' , '>=' , '499980' ],
6 [ 'gender' , '=' , 'F' ]
7 ]);
or语句
1 DB :: table ( 'employees' ) -> where ( 'emp_no' , '>=' , '499980' ) -
> orWhere ( 'emp_no' , '<' , '10' ) -> get ();
whereBetween
1 DB :: table ( 'employees' ) -> whereBetween ( 'emp_no' ,[499980,499999] ) -> get ();
whereNotBetween同理
whereIn,whereNotIn
1 DB :: table ( 'employees' ) -> whereIn ( 'emp_no' ,[11111,11112,11113] ) -> get ();
whereNotIn同理
whereNull,whereNotNull
1 DB :: table ( 'employees' ) -> whereNull ( 'birth_date' ) -> get ();
wherNotNull同理 whereDate / whereMonth / whereDay / whereYear / whereTime
insert()
获取?增ID
update()
delete()
Eloquent
定义模型
这将在项?中?成?个Employee.php,内容如下:
orderBy()
$result = DB :: table ( 'employees' ) -> whereIn ( 'emp_no' ,[ 11111 , 11112 , 11113 ]) -
> orderBy ( 'hire_date' , 'asc' , 'birth_date' , 'asc' ) -> get ();
1
2
groupBy(),having
DB :: table ( 'salaries' ) -> select ( 'emp_no' , 'salary' ) -> groupBy ( 'emp_no' , 'salary' ) -
> having ( 'emp_no' , '>' , '499990' ) -> get ();
1
1 DB :: table ( 'employees' ) -> insert ( [ 'firtst_name' => 'Jack' , 'last_name' => 'Ma' ] );
2 DB :: table ( 'employees' ) -> insert ( [
3 [ 'firtst_name' => 'Jack' , 'last_name' => 'Ma' ],
4 [ 'firtst_name' => 'Jack2' , 'last_name' => 'Ma' ]
5 ] );
$id = DB :: table ( 'employees' ) -
> insertGetId ([ 'firtst_name' => 'Jack' , 'last_name' => 'Ma' ]);
1
DB :: table ( 'employees' ) -> where ( 'id' ,1 ) -
> update ( [ 'last_name' => 'Ma' , 'gendger' => 'M' ] );
1
1 DB :: table ( 'employees' ) -> where ( 'id' ,1 ) -> delete ();
1 $ php artisan make :model Employee 1 <?php
2 namespace App ;
3 use Illuminate \ Database \ Eloquent \ Model ;
4 class Employee extends Model
5 {
6 //
7 }
此时Employee模型默认对应employees表(?写的模型类名复数格式)。
模型成员变量
$table:关联到模型的数据表
$primaryKey:主键名(默认为id)
$keyType:主键类型(默认为整形数据)
$incrementing:主键是否?增(默认为true)
$fifillable:可以被赋值的属性,不能与$guarded同时使?
$guarded:不会被赋值的属性,不能与$fifillable同时使?
获取
1 $emps = Employee :: all (); // 返回表中所有数据
2 $emps = Employee :: where ([[ 'last_name' , 'like' , 'A%' ],[ 'gender' , '=' , 'M' ]]) -
> orderby ( 'birth_date' , 'asc' ) -> limit ( 3 ) -> get (); // 条件查询
就是将Employee模型就是?个查询构建器,我们可以在模型上使?查询构建起的所有?法。
插?
1 public function store ( Request $request ){
2 $emp = new Employee ();
3 $emp -> first_name = $request -> input ( 'first_name' );
4 $emp -> last_name = $request -> input ( 'last_name' );
5 $emp -> birth_date = $request -> input ( 'birth_date' );
6 $emp -> hire_date = date ( 'Y-m-d' , time ());
7 $emp -> gender = $request -> input ( 'gender' );
8 var_dump ( $emp );
9 $emp -> save ();
10 }
更新 1 $emp = Employee :: find ( $emp_no ); // 先查询
2 $emp -> first_name = $request -> input ( 'first_name' );
3 $emp -> last_name = $request -> input ( 'last_name' );
4 $emp -> birth_date = $request -> input ( 'birth_date' );
5 $emp -> hire_date = $request -> input ( 'hire_date' );
6 $emp -> gender = $request -> input ( 'gender' );
7 $emp -> save (); // 更新到数据库
批量更新:
1 Employee :: where ( 'emp_no' , '>' , '500000' ) -> update ( [ 'hire_date' => '2020-05-10' ] );
删除
1 Employee :: find ( 1 ) -> delete (); // 按主键删除
2 Employee :: where ( 'last_name' , 'AAA' ) -> delete (); // 批量删除
3 Employee :: destroy ( 1 ); // 按主键删除
4 Employee :: destroy ([ 1 , 2 , 3 ]); // 批量删除
软删除
1 class Employee extends Model
2 {
3 use SoftDeletes ;
4 /**
5 * 应该被调整为?期的属性
6 *
7 * @ var array
8 */
9 protected $dates = [ 'deleted_at' ];
10 }
表中有deleted_at列,那么上?的配置将会软删除
关联关系
1 class Employee extends Model
2 {
3 // protected $table = 'employees_temp';
4 protected $primaryKey = 'emp_no' ;
5 public $timestamps = false ;
6 // ?对?,?个 Employee 关联?个 salary 7 public function salary (){
8 return $this -> hasOne ( 'App\Salary' , 'emp_no' , 'emp_no' );
9 }
10 // ?对多,?个 Employee 关联?个 title
11 public function titles (){
12 return $this -> hasMany ( 'App\Title' , 'emp_no' , 'emp_no' );
13 }
14 }
hasOne和hasMany的第?个参数是外键名,默认为?法名加_id后缀,第?个参数为主键名,或当前
模型的关联字段名称。
1 $emp = Employee :: find ( 1 );
2 $salary = $emp -> salary ;
3 $titles = $emp -> titles ;
逆向
1 class Salary extends Model
2 {
3 public function Employee (){
4 return $ this -> belongsTo ( 'App\Employee' , 'emp_no' , 'emp_no' );
5 }
6 }
belongsTo第?个参数是外键名,默认为当前模型名加_id后缀,第三个参数为主键名,默认为id。
1 $salary = Salary :: find ( 1 );
2 $emp = $salary -> emplioyee ;
多对多
1 class Employee extends Model
2 {
3 protected $primaryKey = 'emp_no' ;
4 public $timestamps = false ;
5 // ?个员?对应多个部?,?个部?有多个员?
6 public function departments (){
7 return $ this -> belongsToMany ( 'App\Department' , 'dept_emp' , 'emp_no' , 'dept_no' );
8 }
9 } 10 class Department extends Model
11 {
12 protected $primaryKey = 'dept_no' ;
13 }
除了employees和departments两张表之外,还有?张dept_emp关系表,在belongsToMany?法的第
?个参数中指定,不指定的话关系表名称默认为departments_employees(按?字?排序),
belongsToMany的第三个参数为关系表中关联employees表的外键名,默认为employee_id,第四个
参数为关系表中,关联departments表的外键,默认为department_id。
pivot:我们获取的每个Employee模型都会?动附上pivot属性,该属性是中间关系表模型。
关联插?、更新
1 $emp = Employee :: find ( 1 );
2 $emp -> titles () -> save ( new Title ([ 'title' => 'Manager' ])); // 插??条
3 $emp -> titles () -> saveMany ([ new Title ([ 'title' => 'Manager' ]), new
Title ([ 'title' => 'Developer' ]));
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:48:46  更:2022-05-13 11:49:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 5:31:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码