Laravel框架数据库CURD操作、连贯操作总结


Posted in PHP onSeptember 03, 2014

一、Selects

检索表中的所有行

$users = DB::table('users')->get();

foreach ($users as $user)

{

var_dump($user->name);

}

从表检索单个行

$user = DB::table('users')->where('name', 'John')->first();

var_dump($user->name);

检索单个列的行
$name = DB::table('users')->where('name', 'John')->pluck('name');

检索一个列值列表
$roles = DB::table('roles')->lists('title');

该方法将返回一个数组标题的作用。你也可以指定一个自定义的键列返回的数组
$roles = DB::table('roles')->lists('title', 'name');

指定一个Select子句
$users = DB::table('users')->select('name', 'email')->get();

 $users = DB::table('users')->distinct()->get();

 $users = DB::table('users')->select('name as user_name')->get();

Select子句添加到一个现有的查询$query = DB::table('users')->select('name');

$users = $query->addSelect('age')->get();

where

$users = DB::table('users')->where('votes', '>', 100)->get();

OR

$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();

Where Between

$users = DB::table('users')->whereBetween('votes', array(1, 100))->get();

Where Not Between

$users = DB::table('users')->whereNotBetween('votes', array(1, 100))->get();

Where In With An Array

$users = DB::table('users')->whereIn('id', array(1, 2, 3))->get();

$users = DB::table('users')->whereNotIn('id', array(1, 2, 3))->get();

Using Where Null To Find Records With Unset Values

$users = DB::table('users')->whereNull('updated_at')->get();

Order By, Group By, And Having

$users = DB::table('users')->orderBy('name', 'desc')->groupBy('count')->having('count', '>', 100)->get();

Offset & Limit

$users = DB::table('users')->skip(10)->take(5)->get();

二、连接

Joins

查询构建器也可以用来编写连接语句。看看下面的例子:

Basic Join Statement

DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')

->join('orders', 'users.id', '=', 'orders.user_id')

->select('users.id', 'contacts.phone', 'orders.price')

->get();

左连接语句

DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')

->get();

DB::table('users')

->join('contacts', function($join)

{

$join->on('users.id', '=', 'contacts.user_id')->orOn(...);

})

->get();

DB::table('users')

->join('contacts', function($join)

{

$join->on('users.id', '=', 'contacts.user_id')

->where('contacts.user_id', '>', 5);

})

->get();

三、分组

有时候,您可能需要创建更高级的where子句,如“存在”或嵌套参数分组。Laravel query builder可以处理这些:

DB::table('users')

->where('name', '=', 'John')

->orWhere(function($query)

{

$query->where('votes', '>', 100)

->where('title', '<>', 'Admin');

})

->get();

上面的查询将产生以下SQL:

select * from users where name = 'John' or (votes > 100 and title 

<> 'Admin')

Exists Statements

DB::table('users')

->whereExists(function($query)

{

$query->select(DB::raw(1))

->from('orders')

->whereRaw('orders.user_id = users.id');

})

->get();

上面的查询将产生以下SQL:

select * from userswhere exists (

select 1 from orders where orders.user_id = users.id

)

四、聚合

查询构建器还提供了各种聚合方法,如统计,马克斯,min,avg和总和。

Using Aggregate Methods

$users = DB::table('users')->count();

$price = DB::table('orders')->max('price');

$price = DB::table('orders')->min('price');

$price = DB::table('orders')->avg('price');

$total = DB::table('users')->sum('votes');

Raw Expressions

有时您可能需要使用一个原始表达式的查询。这些表达式将注入的查询字符串,所以小心不要创建任何SQL注入点!创建一个原始表达式,可以使用DB:rawmethod:

Using A Raw Expression

$users = DB::table('users')

->select(DB::raw('count(*) as user_count, status'))

->where('status', '<>', 1)

->groupBy('status')

->get();

递增或递减一个列的值

DB::table('users')->increment('votes');

DB::table('users')->increment('votes', 5);

DB::table('users')->decrement('votes');

DB::table('users')->decrement('votes', 5);

您还可以指定额外的列更新:

DB::table('users')->increment('votes', 1, array('name' => 'John'));

Inserts

将记录插入表

DB::table('users')->insert(

array('email' => 'john@example.com', 'votes' => 0)

);

将记录插入表自动增加的ID

如果表,有一个自动递增的id字段使用insertGetId插入一个记录和检索id:

$id = DB::table('users')->insertGetId(

array('email' => 'john@example.com', 'votes' => 0)

);

注意:当使用PostgreSQL insertGetId方法预计,自增列被命名为“id”。

多个记录插入到表中

DB::table('users')->insert(array(

array('email' => 'taylor@example.com', 'votes' => 0),

array('email' => 'dayle@example.com', 'votes' => 0),

));

四、Updates

更新一个表中的记录

DB::table('users')

->where('id', 1)

->update(array('votes' => 1));

五、 Deletes

删除表中的记录

DB::table('users')->where('votes', '<', 100)->delete();

删除表中的所有记录

DB::table('users')->delete();

删除一个表
DB::table('users')->truncate();

六、Unions

查询构建器还提供了一种快速的方法来“联盟”两个查询:

$first = DB::table('users')->whereNull('first_name');

$users = 

DB::table('users')->whereNull('last_name')->union($first)->get();

unionAll方法也可以,有相同的方法签名。

Pessimistic Locking

查询构建器包括一些“悲观锁定”功能来帮助你做你的SELECT语句。

运行SELECT语句“共享锁”,你可以使用sharedLock方法查询:

DB::table('users')->where('votes', '>', 

100)->sharedLock()->get();

更新“锁”在一个SELECT语句,您可以使用lockForUpdate方法查询:
 DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();

七、缓存查询

你可以轻松地缓存查询的结果使用记忆法:

$users = DB::table('users')->remember(10)->get();

在本例中,查询的结果将为十分钟被缓存。查询结果缓存时,不会对数据库运行,结果将从默认的缓存加载驱动程序指定您的应用程序。

如果您使用的是支持缓存的司机,还可以添加标签来缓存:

$users = DB::table('users')->cacheTags(array('people', 'authors'))->remember(10)->get();
PHP 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
PHP 事务处理数据实现代码
May 13 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
Look And Say 序列php实现代码
May 22 PHP
获取PHP警告错误信息的解决方法
Jun 03 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
PHP中返回引用类型的方法
Apr 03 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
Yii中render和renderPartial的区别
Sep 03 #PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 #PHP
Fedora下安装php Redis扩展笔记
Sep 03 #PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 #PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 #PHP
PHP高级编程实例:编写守护进程
Sep 02 #PHP
php输入流php://input使用浅析
Sep 02 #PHP
You might like
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
JavaScript实现左侧菜单效果
2017/12/14 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
Python理解递归的方法总结
2019/01/28 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
详解python with 上下文管理器
2020/09/02 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
高中的自我鉴定
2013/12/16 职场文书
大学生实习介绍信
2015/05/05 职场文书
《假如》教学反思
2016/02/17 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
浅谈Python魔法方法
2021/06/28 Java/Android
用JS创建一个录屏功能
2021/11/11 Javascript