Laravel 5.2 文档 数据库 ―― 起步介绍


Posted in PHP onOctober 21, 2019

1、简介

Laravel 让连接多种数据库以及对数据库进行查询变得非常简单,不论使用原生 SQL、还是查询构建器,还是 Eloquent ORM。目前,Laravel 支持四种类型的数据库系统:

MySQL

Postgres

SQLite

SQL Server

配置

Laravel 让连接数据库和运行查询都变得非常简单。应用的数据库配置位于config/database.php。在该文件中你可以定义所有的数据库连接,并指定哪个连接是默认连接。该文件中提供了所有支持数据库系统的配置示例。 默认情况下,Laravel 示例环境配置已经为 Laravel Homestead 做好了设置,当然,你也可以按照需要为本地的数据库修改该配置。

读/写连接

有时候你希望使用一个数据库连接做查询,另一个数据库连接做插入、更新和删除,Laravel 使得这件事情轻而易举,不管你用的是原生 SQL,还是查询构建器,还是 Eloquent ORM,合适的连接总是会被使用。 想要知道如何配置读/写连接,让我们看看下面这个例子:

'mysql' => [
 'read' => [
  'host' => '192.168.1.1',
 ],
 'write' => [
  'host' => '196.168.1.2'
 ],
 'driver' => 'mysql',
 'database' => 'database',
 'username' => 'root',
 'password' => '',
 'charset' => 'utf8',
 'collation' => 'utf8_unicode_ci',
 'prefix' => '',
],

注意我们在配置数组中新增了两个键:read和write,这两个键都对应一个包含单个键“host”的数组,读/写连接的其它数据库配置选项都共用 mysql 的主数组配置。 如果我们想要覆盖主数组中的配置,只需要将相应配置项放到read和write数组中即可。在本例中,192.168.1.1将被用作“读”连接,而192.168.1.2将被用作“写”连接。两个数据库连接的凭证(用户名/密码)、前缀、字符集以及其它配置将会共享mysql数组中的设置。

2、运行原生 SQL 查询

配置好数据库连接后,就可以使用DB门面来运行查询。DB门面为每种查询提供了相应方法:select, update, insert, delete, 和statement。

运行 Select 查询

运行一个最基本的查询,可以使用DB门面的select方法:

<?php

namespace App\Http\Controllers;

use DB;
use App\Http\Controllers\Controller;

class UserController extends Controller{
 /**
  * 显示用户列表
  *
  * @return Response
  */
 public function index()
 {
  $users = DB::select('select * from users where active = ?', [1]);
  return view('user.index', ['users' => $users]);
 }
}

传递给select方法的第一个参数是原生的SQL语句,第二个参数需要绑定到查询的参数绑定,通常,这些都是where字句约束中的值。参数绑定可以避免SQL注入攻击。 select方法以数组的形式返回结果集,数组中的每一个结果都是一个PHP StdClass对象,从而允许你像下面这样访问结果值:

foreach ($users as $user) {

 echo $user->name;

}

使用命名绑定

除了使用?占位符来代表参数绑定外,还可以使用命名绑定来执行查询:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

运行插入语句

使用DB门面的insert方法执行插入语句。和select一样,改方法将原生SQL语句作为第一个参数,将绑定作为第二个参数:

DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

运行更新语句

update方法用于更新数据库中已存在的记录,该方法返回受更新语句影响的行数:

$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

运行删除语句

delete方法用于删除数据库中已存在的记录,和update一样,该语句返回被删除的行数:

$deleted = DB::delete('delete from users');

运行一个通用语句

有些数据库语句不返回任何值,对于这种类型的操作,可以使用DB门面的statement方法:

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

监听查询事件

如果你想要获取应用中每次 SQL 语句的执行,可以使用listen方法,该方法对查询日志和调试非常有用,你可以在服务提供者中注册查询监听器:

<?php

namespace App\Providers;

use DB;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider{
 /**
  * 启动所有应用服务
  *
  * @return void
  */
 public function boot()
 {
  DB::listen(function($query) {
   // $query->sql
   // $query->bindings
   // $query->time
  });
 }

 /**
  * 注册服务提供者
  *
  * @return void
  */
 public function register()
 {
  //
 }
}

3、数据库事务

想要在一个数据库事务中运行一连串操作,可以使用DB门面的transaction方法,如果事务闭包中抛出异常,事务将会自动回滚。如果闭包执行成功,事务将会自动提交。使用transaction方法时不需要担心手动回滚或提交:

DB::transaction(function () {

 DB::table('users')->update(['votes' => 1]);

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

});

手动使用事务

如果你想要手动开始事务从而对回滚和提交有一个完整的控制,可以使用DB门面的beginTransaction方法:

DB::beginTransaction();

你可以通过rollBack方法回滚事务:

DB::rollBack();

最后,你可以通过commit方法提交事务:

DB::commit();

注意:使用DB门面的事务方法还可以用于控制查询构建器和 Eloquent ORM 的事务。

4、使用多个数据库连接

使用多个数据库连接的时候,可以使用DB门面的connection方法访问每个连接。传递给connection方法的连接名对应配置文件config/database.php中相应的连接:

$users = DB::connection('foo')->select(...);

你还可以通过连接实例上的getPdo方法底层原生的 PDO 实例:

$pdo = DB::connection()->getPdo();
$pdo = DB::connection()->getPdo();

以上这篇Laravel 5.2 文档 数据库 —— 起步介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php代码把全角数字转为半角数字
Dec 10 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
php设置页面超时时间解决方法
Sep 22 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 PHP
php中Swoole的热更新实现代码实例
Mar 04 PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 #PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 #PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 #PHP
PHP常用函数之格式化时间操作示例
Oct 21 #PHP
PHP常用函数之base64图片上传功能详解
Oct 21 #PHP
laravel5 Eloquent 实现事务方式
Oct 21 #PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 #PHP
You might like
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python 串口读写的实现方法
2019/06/12 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
西北政法大学自主招生自荐信
2014/01/29 职场文书
关于运动会的稿件
2014/02/02 职场文书
亲子活动总结
2014/04/26 职场文书
初中中等生评语
2014/12/29 职场文书