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 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
PHP技术开发技巧分享
Mar 23 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
PHP图片上传代码
Nov 04 PHP
php调整服务器时间的方法
Apr 03 PHP
PHP常用的小程序代码段
Nov 14 PHP
实例讲解php数据访问
May 09 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 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下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php程序内部post数据的方法
2015/03/31 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
Python中的取模运算方法
2018/11/10 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
详解Django配置优化方法
2019/11/18 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
ASP.NET中的身份验证有那些
2012/07/13 面试题
专业实习自我鉴定
2013/10/29 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
实习生评语
2014/04/26 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技