PHP开垦框架Laravel数据库操作方法总计,增加和删除改查

一、读/写连接

1、简介

1、连接数据库

一时候你或者希望选择一个SELECT语句的数据库连接,,另四个用于插入、更新和删除语句。Laravel使那和风,将始终使用科学的连日是还是不是选择原本查询,查询生成器或雄辩的ORM。

Laravel
让连接二种数据库以及对数据库实行询问变得特别轻巧,不论采取原生
SQL、照旧查询营造器,照旧 Eloquent ORM。近些日子,Laravel
接济各种档期的顺序的数据库系统:

Laravel中数据库配置文件为config/database.php,展开该公文,暗许内容如下:

哪些读/写连接应该配备,让我们看看这几个例子:

MySQL
Postgres
SQLite
SQL Server
配置

<?php

复制代码代码如下:

Laravel
让连接数据库和平运动行查询都变得极其轻巧。应用的数据库配置位于config/database.php。在该公文中您能够定义所有的数据库连接,并点名哪个连接是暗许连接。该公文中提供了颇具帮忙数据库系统的陈设示范。

return [
    //默许重返结果集为PHP对象实例
    ‘fetch’ => PDO::FETCH_CLASS,
    //暗中认可数据库连接为mysql,能够在.env文件中修改DB_CONNECTION的值
    ‘default’ => env(‘DB_CONNECTION’, ‘mysql’),

‘mysql’ => array(‘read’ => array(‘host’ =>
‘192.168.1.1’),’write’ => array(‘host’ => ‘196.168.1.2’),’driver’
=> ‘mysql’,’database’ =>’database’,’username’ =>
‘root’,’password’ => ”,’charset’ => ‘utf8′,’collation’ =>
‘utf8_unicode_ci’,’prefix’ => ”)

默许情状下,Laravel 示例意况安插已经为 Laravel Homestead
做好了安装,当然,你也足以服从供给为地面包车型地铁数据库修改该配置。

    ‘connections’ => [
        //sqlite数据库相关配置
        ‘sqlite’ => [
            ‘driver’ => ‘sqlite’,
            ‘database’ => storage_path(‘database.sqlite’),
            ‘prefix’ => ”,
        ],
        //mysql数据库相关配置
        ‘mysql’ => [
            ‘driver’ => ‘mysql’,
            ‘host’ => env(‘DB_HOST’, ‘localhost’),
            ‘database’ => env(‘DB_DATABASE’, ‘forge’),
            ‘username’ => env(‘DB_USERNAME’, ‘forge’),
            ‘password’ => env(‘DB_PASSWORD’, ”),
            ‘charset’ => ‘utf8’,
            ‘collation’ => ‘utf8_unicode_ci’,
            ‘prefix’ => ”,
            ‘strict’ => false,
        ],
        //Postgres数据库相关布置
        ‘pgsql’ => [
            ‘driver’ => ‘pgsql’,
            ‘host’ => env(‘DB_HOST’, ‘localhost’),
            ‘database’ => env(‘DB_DATABASE’, ‘forge’),
            ‘username’ => env(‘DB_USERNAME’, ‘forge’),
            ‘password’ => env(‘DB_PASSWORD’, ”),
            ‘charset’ => ‘utf8’,
            ‘prefix’ => ”,
            ‘schema’ => ‘public’,
        ],
        //SQL Server数据库相关安排
        ‘sqlsrv’ => [
            ‘driver’ => ‘sqlsrv’,
            ‘host’ => env(‘DB_HOST’, ‘localhost’),
            ‘database’ => env(‘DB_DATABASE’, ‘forge’),
            ‘username’ => env(‘DB_USERNAME’, ‘forge’),
            ‘password’ => env(‘DB_PASSWORD’, ”),
            ‘charset’ => ‘utf8’,
            ‘prefix’ => ”,
        ],

留心,多个键增添到铺排阵列:读和写。那多少个键有数组值包括一个至关心珍贵要:主机。其余的读写数据库选项从主mysql连接将联合后的数组。所以,大家只须求将物品放入读取和写入数组借使我们盼望覆盖尊敬数组中的值。所以,在这种情形下,192.168.1.1将被作为“读”连接,while192.168.1.2将被看成“写”连接。数据库凭证、前缀、字符集和兼具其余选取在主mysql数组将跨七个分享连接。

读/写连接

    ],
    //迁移表名称
    ‘migrations’ => ‘migrations’,
    //Redis数据库相关配置
    ‘redis’ => [

二、运营查询

一时候你希望利用三个数据库连接做询问,另叁个数据库连接做插入、更新和删除,Laravel
使得那件工作轻而易举,不管您用的是原生 SQL,还是查询营造器,照旧Eloquent ORM,合适的总是总是会被利用。

        ‘cluster’ => false,

PHP开垦框架Laravel数据库操作方法总计,增加和删除改查。尽管您已经计划了数据库连接,你能够应用DB运营查询类。

想要知道什么样安顿读/写连接,让大家看看下边那几个例子:

        ‘default’ => [
            ‘host’ => ‘127.0.0.1’,
            ‘port’ => 6379,
            ‘database’ => 0,
        ],
 
    ],

运维二个Select查询

‘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’    => ”,
],

];
借使要修改数据库配置消息,去修改.env对应值就能够。大家实例教程使用的Homestead开拓情况暗许配置,不做修改。要是您未曾行使Homestead,则供给基于地点配置修改相应配置值。

复制代码代码如下:

留心大家在安插数组中新扩展了八个键:read和write,那五个键都对应叁个满含单个键“host”的数组,读/写连接的任何数据库配置选项都共用
mysql 的主数组安排。

咱们在讲Windows上安装Homestead的时候,已经演示过数据库连接测验,以及哪些在地面使用Navicat连接Homestead的数据库,这里不再赘述,上面直接进去怎样行使数据库进行增加和删除改查。

$results = DB::select(‘select * from users where id = ?’, array(1));

一经大家想要覆盖主数组中的配置,只必要将相应布置项放到read和write数组中就能够。在本例中,192.168.1.1将被当做“读”连接,而192.168.1.2将被当做“写”连接。八个数据库连接的凭据(用户名/密码)、前缀、字符集以及别的配置将会分享mysql数组中的设置。

2、数据库开始化

结果的抉择格局总是回到多个数组。

2、运转原生 SQL 查询

大家在项目根目录使用Artisan命令运维Laravel自带的搬迁生成users表和password_reset表:

运作八个Insert语句

配备好数据库连接后,就足以选择DB门面来运作查询。DB门面为每一种查询提供了相应措施:select,
update, insert, delete, 和statement。

美高梅开户网址 1

复制代码代码如下:

运行 Select 查询

对应在数据库中生成三张表:

  DB::insert(‘insert into users (id, name) values (?, ?)’, array(1,
‘Dayle’));

运维一个最大旨的询问,可以运用DB门面包车型客车select方法:

美高梅开户网址 2

运转多少个翻新语句

<?php

3、使用DB门面进行增加和删除改查

复制代码代码如下:

namespace App\Http\Controllers;

3.1 插入数据

  DB::update(‘update users set votes = 100 where name = ?’,
array(‘John’));

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

咱俩应用DB门面施行原生SQL语句,插入操作使用DB门面包车型地铁insert方法,代码如下:

运维二个Delete语句

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

<?php

复制代码代码如下:

传送给select方法的第三个参数是原生的SQL语句,第三个参数须要绑定到查询的参数绑定,常常,这几个都是where字句约束中的值。参数绑定可防止止SQL注入攻击。

namespace App\Http\Controllers;

DB::delete(‘delete from users’);

select方法以数组的款型重临结果集,数组中的每二个结实都以叁个PHP
StdClass对象,从而允许你像上边那样访问结果值:

use Illuminate\Http\Request;

专注:update和delete语句重返的行数的影响操作。

foreach ($users as $user) {
    echo $user->name;
}

use App\Http\Requests;
use App\Http\Controllers\Controller;

运作三个通用申明

利用命名绑定

use DB;

复制代码代码如下:

除去选择?占位符来代表参数绑定外,还足以采纳命名绑定来实行查询:

class TestController extends Controller
{

DB::statement(‘drop table users’);

$results = DB::select(‘select * from users where id = :id’, [‘id’
=> 1]);
运行插入语句

/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{

询问事件监听

动用DB门面包车型大巴insert方法实施插入语句。和select同样,改措施将原生SQL语句作为第二个参数,将绑定作为第二个参数:

    DB::insert(‘insert into users (id, name, email, password) values (?,
?, ? , ? )’,
        [1, ‘Laravel’,’laravel@test.com’,’123′]);
    DB::insert(‘insert into users (id, name, email, password) values (?,
?, ?, ? )’,
        [2, ‘Academy’,’academy@test.com’,’123′]);

您可以查询事件监听使用DB::听方法:

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

    }
}
在浏览器中输入

复制代码代码如下:

运行更新语句

db-insert-data

DB::listen(function($sql, $bindings, $time){ //});

update方法用于更新数据库中已存在的笔录,该办法再次回到受更新语句影响的行数:

3.2 查询语句

三、数据库事务

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

询问操作使用DB门面的select艺术,代码如下:

  运行在三个数据库事务的一组操作,您能够应用专门的学业方法:

运营删除语句

$user = DB::select(‘select * from users where id = ?’, [1]);
dd($user);
在浏览器地址栏输入

复制代码代码如下:

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

美高梅开户网址 3

 DB::transaction(function(){
DB::table(‘users’)->update(array(‘votes’ 
=> 1)); DB::table(‘posts’)->delete();});

$deleted = DB::delete(‘delete from users’);

能够观望select查询再次回到的结果是数组。而数组中的每贰个要素都是PHP对象。

在意:在事情抛出的别的特别关闭将变成自动事务将回滚

运维一个通用语句

大家还能看来在实行查询的时候利用了参数绑定,以免止SQL注入。除此而外还能选择命名绑定:

突发性你也许要求开首一个工作:

稍微数据库语句不回去任何值,对于这类别型的操作,能够利用DB门面包车型客车statement方法:

$user = DB::select(‘select * from users where id = :id’,
[‘:id’=>1]);
作用同样。

复制代码代码如下:

DB::statement(‘drop table users’);

3.3 更新语句

DB::beginTransaction();

监听查询事件

立异表记录能够运用DB门面包车型客车update方法,该办法再次来到受影响的行数:

您能够由此回滚事务回滚方法:

若是您想要获取使用中年天命之年是 SQL
语句的实行,能够运用listen方法,该办法对查询日志和调节和测验极其有用,你能够在劳动提供者中注册查询监听器:

$affected = DB::update(‘update users set name=”LaravelAcademy” where
name = ?’, [‘Academy’]);
echo $affected;
打字与印刷结果为1,若无立异任何笔录则再次来到0。

复制代码代码如下:

<?php

3.4 删除语句

DB::rollback();

namespace App\Providers;

剔除表记录使用DB门面包车型客车delete方法,和update类似,该措施重临被去除的行数:

末段,您能够经过付出方法:提交一个事情

use DB;
use Illuminate\Support\ServiceProvider;

$deleted = DB::delete(‘delete from users’);
echo $deleted;
打字与印刷结果为2,表数据都被我们删除了。

复制代码代码如下:

class AppServiceProvider extends ServiceProvider{
    /**
     * 运营全体应用服务
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function($query) {
            // $query->sql
            // $query->bindings
            // $query->time
        });
    }

3.5 通用语句

DB::commit();

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

除了这一个之外上述这几个DML(insert/update/delete)和DQL(select)语句,SQL语句还包含DCL(create/drop等)和DDL(grant等),要运维前面一个,大家可以调用DB门面的statement方法:

四、访问连接

3、数据库事务

DB::statement(‘drop table users’);
实践完该语句后,数据表users会被剔除。

当使用五个一连,你能够访问它们通过DB::连接格局:

想要在一个数据库事务中运作一而再串操作,可以行使DB门面的transaction方法,如果专门的工作闭包中抛出极度,事务将会活动回滚。假使闭包实践成功,事务将会自行提交。使用transaction方法时无需操心手动回滚或提交:

4、监听查询事件
美高梅开户网址,除了,大家仍是能够通过DB门面包车型大巴listen方法监听查询事件,举例大家在记录日志和调理的时候那会给大家鲜明难题提供有益,能够在劳务提供者的boot方法中登记该监听器,例如大家在AppServiceProvider的boot方法中定义监听器如下:

复制代码代码如下:

DB::transaction(function () {
    DB::table(‘users’)->update([‘votes’ => 1]);
    DB::table(‘posts’)->delete();
});

/**
* 运转全数应用服务
*
* @return void
*/
public function boot()
{
    DB::listen(function($sql, $bindings, $time) {
        echo
‘SQL语句实践:’.$sql.’,参数:’.json_encode($bindings).’,耗时:’.$time.’ms’;
    });
}
这么大家运营如下SQL语句:

$users = DB::connection(‘foo’)->select(…);

手动使用工作

DB::insert(‘insert into users (id, name, email, password) values (?, ?,
? , ? )’,
    [3, ‘LaravelAcademy’,’laravel-academy@test.com’,’123′]);
则浏览器会输出如下内容:

您也足以访问原来的、潜在的PDO实例:

设若您想要手动初阶作业从而对回滚和付出有叁个完好无缺的操纵,能够采取DB门面包车型客车beginTransaction方法:

SQL语句推行:insert into users (id, name, email, password) values (?, ?,
? , ?
),参数:[3,”LaravelAcademy”,”laravel-academy@test.com”,”123″],耗时:1.26ms
5、数据库事务
繁多时候,大家必要进行一而再串操作,而其间任何一个操作失误则整个工艺流程战败,须要回退重来,这年大家将在用到数据库事务。

复制代码代码如下:

DB::beginTransaction();

DB门面提供二种艺术支持数据库事务,一种是调用transaction方法然后传入闭包作为参数,大家将索要开始展览作业操作的逻辑放到闭包函数内:

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

您能够由此rollBack方法回滚事务:

DB::transaction(function () {
    DB::table(‘users’)->update([‘id’ => 1]);
    DB::table(‘posts’)->delete();
});
另一种是 beginTransaction、 rollBack和
commit四个议程一同行使从而创设叁个全体的职业操作:

不时你大概供给再度连接到叁个加以的数据库:

DB::rollBack();

DB::beginTransaction();
if($somethingIsFailed){
    DB::rollback();
    return false;
}
DB::commit();
其余,使用DB门面提供的政工还支持查询塑造器和Eloquent ORM数据库操作。

复制代码代码如下:

终极,你能够通过commit方法提交业务:

DB::reconnect(‘foo’);

DB::commit();

一经你供给断开从给定的数据库将超过底层PDO实例’smax_connections限制,使用断开连接方法:

稳重:使用DB门面包车型客车工作方法还足以用来调节查询创设器和 Eloquent ORM
的作业。
4、使用八个数据库连接

复制代码代码如下:

行使三个数据库连接的时候,能够动用DB门面包车型大巴connection方法访问每一个连接。传递给connection方法的连天名对应配置文件config/database.php中相应的连日:

DB::disconnect(‘foo’);

$users = DB::connection(‘foo’)->select(…);

五、查询日志

您还足以经过一连实例上的getPdo方法底层原生的 PDO 实例:

暗许境况下,Laravel日志保存在内部存款和储蓄器的持有查询运营业前的央浼。可是,在少数情形下,举例当插入的行数,那也许会招致应用程序使用多余的内部存款和储蓄器。禁止使用日志,你可以动用disableQueryLog方法:

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

复制代码代码如下:

DB::connection()->disableQueryLog();

o获得一组实施的查询,您能够运用getQueryLog方法:

复制代码代码如下:

$queries = DB::getQueryLog();


发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图