精华内容
下载资源
问答
  • laravel查看sql语句

    2018-07-20 09:43:00
    laravel查看sql语句 方法一: 我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可: //app/Http/routes.php Route::get(...

    我自己是用第一种方法来调试的,第三种不行 不知道为啥

    laravel查看sql语句

    方法一:

    我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可:

    //app/Http/routes.php

    Route::get(‘/test-sql’, function() {

    DB::enableQueryLog();
    
    $user = App\User::all();
    
    return response()->json(DB::getQueryLog());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    }); 
    然后我们在浏览器打开 http://www.yousite.com/test-sql 即可看到 $user = User::all(); 所产生的 SQL 了。



    query: “select * from users where users.deleted_at is null”, 
    bindings: [ ], 
    time: 1.37 

    ]

    方法二:

    在routes.php添加如下代码

    Event::listen(‘illuminate.query’, function(sql,sql,param) { 
    file_put_contents(public_path().’/sql.log’,sql.[.printr(sql.′[′.printr(param, 1).’]’.”\r\n”,8); 
    //echo sql.",with[".join(,,sql.",with[".join(′,′,param) .”]“; 
    });

    方法三: 
    调用vendor\laravel\framework\src\Illuminate\Database\Query的toSql方法: 
    $query->toSql(); 
    方法四: 
    使用监听器

    第一步:创建监听器

    php artisan make:listener QueryListener –event=illuminate.query 
    生成文件于 app/Listeners/QueryListener.php

    然后删除 app/Listeners/QueryListener.php 顶部的 use App\Events\illuminate.query;, 这是自动生成的。

    第二步:注册事件

    打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 illuminate.query 事件的监听器为 QueryListener:

    protected $listen = [ 
    ‘illuminate.query’ => [ 
    QueryListener::class, 
    ], 
    ]; 
    当然在类前面你需要 use App\Listeners\QueryListener; 不然就报类不存在了。

    第三步:添加逻辑

    修改上面生成的文件,我们把 SQL 查询记录到日志里,所以编辑 handle 方法为:

    /**
     * Handle the event.
     *
     * @param  Events  $event
     * @return void
     */
    public function handle($sql, $params)
    {
        if (env('APP_ENV', 'production') == 'local') {
            foreach ($params as $index => $param) {
                if ($param instanceof DateTime) {
                    $params[$index] = $param->format('Y-m-d H:i:s');
                }
            }
            $sql = str_replace("?", "'%s'", $sql);
            array_unshift($params, $sql);
            Log::info(call_user_func_array('sprintf', $params));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    上面我们用到了两个类:Log 与 DateTime, 别忘记引入它们。

    解释一下上面的代码:

    illuminate.query 事件触发时的参数为两个:handle(sql,sql,params), SQL 预处理语句与查询参数值; 
    我们只在开发环境记录 SQL:env(‘APP_ENV’, ‘production’) == ‘local’; 
    我们的参数里可能存在日期类型,所以直接记日志会报错,所以处理一下:$param instanceof DateTime; 
    然后跑一下试试吧,应该在日志里就能看到:

    [2015-07-10 02:45:39] local.INFO: update tricks set view_cache = “10”, updated_at = “2015-07-10 02:45:39” where id= “2”

    转载于:https://www.cnblogs.com/djwhome/p/9339821.html

    展开全文
  • laravel 查看sql

    2019-01-18 11:10:01
    我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可: //app/Http/routes.php Route::get('/test-sql', function() { DB::...

    方法一:

    我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可:

    //app/Http/routes.php
    
    
    Route::get('/test-sql', function() {
    
        DB::enableQueryLog();
    
        $user = App\User::all();
    
        return response()->json(DB::getQueryLog());
    });
    

    然后我们在浏览器打开 http://www.yousite.com/test-sql 即可看到 $user = User::all(); 所产生的 SQL 了。

    [
        {
            query: "select * from `users` where `users`.`deleted_at` is null",
            bindings: [ ],
            time: 1.37
        }
    ]
    
    
    方法二:
    
    在routes.php添加如下代码
    
    
    Event::listen('illuminate.query', function($sql, $param) {
        file_put_contents(public_path().'/sql.log',$sql.'['.print_r($param, 1).']'."\r\n",8);
        //echo $sql . ", with[" . join(',', $param) ."]</br>";
    });
    
    方法三:
    调用vendor\laravel\framework\src\Illuminate\Database\Query的toSql方法:
    $query->toSql();
    方法四:
    使用监听器
    
    

    第一步:创建监听器

    php artisan make:listener QueryListener --event=illuminate.query
    

    生成文件于 app/Listeners/QueryListener.php

    然后删除 app/Listeners/QueryListener.php 顶部的 use App\Events\illuminate.query;, 这是自动生成的。

    第二步:注册事件

    打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 illuminate.query 事件的监听器为 QueryListener

    protected $listen = [
            'illuminate.query' => [
                QueryListener::class,
            ],
        ];
    

    当然在类前面你需要 use App\Listeners\QueryListener; 不然就报类不存在了。

    第三步:添加逻辑

    修改上面生成的文件,我们把 SQL 查询记录到日志里,所以编辑 handle 方法为:

        /**
         * Handle the event.
         *
         * @param  Events  $event
         * @return void
         */
        public function handle($sql, $params)
        {
            if (env('APP_ENV', 'production') == 'local') {
                foreach ($params as $index => $param) {
                    if ($param instanceof DateTime) {
                        $params[$index] = $param->format('Y-m-d H:i:s');
                    }
                }
                $sql = str_replace("?", "'%s'", $sql);
                array_unshift($params, $sql);
                Log::info(call_user_func_array('sprintf', $params));
            }
        }
    

    上面我们用到了两个类:Log 与 DateTime, 别忘记引入它们。

    解释一下上面的代码:

    1. illuminate.query 事件触发时的参数为两个:handle($sql, $params), SQL 预处理语句与查询参数值;
    2. 我们只在开发环境记录 SQL:env('APP_ENV', 'production') == 'local'
    3. 我们的参数里可能存在日期类型,所以直接记日志会报错,所以处理一下:$param instanceof DateTime

    然后跑一下试试吧,应该在日志里就能看到:

    [2015-07-10 02:45:39] local.INFO: update `tricks` set `view_cache` = "10", `updated_at` = "2015-07-10 02:45:39" where `id` = "2"
    展开全文
  • Laravel 记录SQL日志

    千次阅读 2017-04-07 14:40:52
    在项目开发过程中或者是性能优化中,经常会有要查看执行sql的情况,然而Laravel日志默认不记录执行sql。好在留有相关接口,我们可以很方便的就是想SQl日志功能。

    在项目开发过程中或者是性能优化中,经常会有要查看执行sql的情况,然而Laravel日志默认不记录执行sql。好在留有相关接口,我们可以很方便的就是想SQl日志功能。

    1. 在 App\Providers\EventServiceProvider:class 中的$listen中新增如下
    protected $listen = [
        'App\Events\Event' => [
            'App\Listeners\EventListener',
        ],
        // 新增SqlListener监听QueryExecuted
        'Illuminate\Database\Events\QueryExecuted' => [
            'App\Listeners\SqlListener',
        ],
    ];
    
    1. 新建SqlListener监听器

    方法1,手动创建,在App\Listeners\SqlListener.php 文件,内容如下

    namespace App\Listeners;
    
    use Illuminate\Database\Events\QueryExecuted;
    
    class SqlListener {
        /**
         * Create the event listener.
         *
         * @return void
         */
        public function __construct() {
            //
        }
    
        /**
         * Handle the event.
         *
         * @param  =QueryExecuted  $event
         * @return void
         */
        public function handle(QueryExecuted $event) {
    
            // 在这里编写业务逻辑
        }
    }
    

    方法2,使用命令行创建,命令如下

    // 该命令必须在项目跟目录下执行,因为项目跟目录下才有artisan文件。
    // 该命令可以自动创建SqlListener文件,但是QueryExecuted这个类的导入可能会有点问题,自己改下。
    
    > php artisan make:listener SqlListener -e=QueryExecuted
    1. 在handle方法中编写记录sql的业务逻辑,如:
    
    /**
     * Handle the event.
     *
     * @param  =QueryExecuted  $event
     * @return void
     */
    public function handle(QueryExecuted $event) {
    
        $sql = str_replace("?", "'%s'", $event->sql);
    
        $log = vsprintf($sql, $event->bindings);
    
        $log = '[' . date('Y-m-d H:i:s') . '] ' . $log . "\r\n";
        $filepath = storage_path('logs\sql.log');
        file_put_contents($filepath, $log, FILE_APPEND);
    
        // 这里也可以直接用Log::info() 里的函数,只是这样会和其他调试信息掺在一起。
        // 如果要用Log里的函数,别忘记了引入Log类。
    }
    
    展开全文
  • Laravel 打印SQL语句

    2020-04-24 10:30:49
    //获取查询语句、参数和执行时间 如果没引入DB类需要加反斜杠 \DB::connection()->enableQueryLog();#开启执行日志 $a = self::where(['investorid'=>$id])->whereBetween('inserttime',[$start,$end])->where('...
    DB::connection()->enableQueryLog();#开启执行日志
    $a = self::where(['investorid'=>$id])->whereBetween('inserttime',[$start,$end])->where('deposit','>',0)->orderBy('id','asc')->Paginate(20);
     print_r(DB::getQueryLog());   //获取查询语句、参数和执行时间

    如果没引入DB类需要加反斜杠

    \DB::connection()->enableQueryLog();#开启执行日志
    $a = self::where(['investorid'=>$id])->whereBetween('inserttime',[$start,$end])->where('deposit','>',0)->orderBy('id','asc')->Paginate(20);
    print_r(\DB::getQueryLog()); //获取查询语句、参数和执行时间

    展开全文
  • 1,引入use Illuminate\Support\Facades\DB; 执行 Insert 语句 你可以使用DBFacade 的insert方法来执行insert语句。与select方法一样,该方法将原生 SQL 查询作为其第一个参数,并将绑定的数据作为第二个参数: ...
  • Laravel 写入sql日志

    千次阅读 2017-11-09 13:47:33
    1.laravel5.4在/app/Providers/AppServiceProvider.php代码如下&lt;?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use DB; class AppServiceProvider extends ServiceProvider { /...
  • laravelsql写入日志

    2016-07-21 15:04:33
    打开app\Providers\AppServiceProvider.php,在boot方法中添加如下内容打开app\Providers\AppServiceProvider.php,在boot方法中添加如下内容5.2以下版本//先引入...DB::listen(function($sql,$bindings,$time)...
  • 1 进入项目根目录引入创建的包 composer require willem/pagecount /www/localhost/laravel5 # composer require willem/pagecount Using version ^1.0 for willem/pagecount ./composer.json has been updated ...
  • laravel框架实现phpExcel导入导出,首先必须在laravel引入第三方类 1、在app目录下创建一个新的文件夹,命名libs(可自定义) 2、(可选)考虑到后面可能会引用很多库,so,在libs下再创建一个phpExcel文件夹,...
  • 0x01 创建SQL监听器Laravel 5.1版本:php artisan make:listener QueryListener --event=illuminate.queryLaravel 5.2、5.3、5.4版本:...
  • Laravel | 导入SQL

    2020-03-31 06:03:40
    记录个 Laravel 泪奔的一点: 命令 作用 vagrant up 启动服务 vagrant ssh 通过 ssh 方式登录 show database; 展示 DB 列表 use xxx; 使用某个数据库 show tables; 列出当前库中表名 source /home...
  • oracle设置自动增长序列 我们在用MS SQL Server时,可以为表的主键设置为自动加1的效果;但是在Oracle当中,我们是无法直接设置一个字段为自动加1,需要先建立一个Sequence,然后为这个表创建一个Trigge ...
  • Laravel5.2连接SQL Server

    千次阅读 2017-05-30 22:43:56
    这玩意儿真是个坑, 数据库课设要求必须要用SQL Server, 对于我这种常年不用Windows的人真是挺难受的. 在Linux下使用pdo_sqlsrv目前还没有成功, 因为...国内网络太那啥. 提供一些参考, 实验成功的朋友可以跟...
  • 1. laravel version 5.5 2. 关键字sql解析的代码,我就不上了。有兴趣的童鞋,可以去Illuminate\Database\Query\Grammars\Grammar观望,我也就简单说下,Laravel的主体思路。 源码 首先找到tosql()方法所在的位置...
  • laravel打出sql语句

    千次阅读 2017-09-28 09:52:19
    方法一 ...$sql = UserModel::query()->where('role','2')->toSql();dd($sql); //select * from User_table where role = '2' 方法二 打开app\Providers\AppServiceProvider.php,在boot方法中
  • laravel 获取执行的SQL

    2019-12-13 19:34:56
    注意引入命名空间 use Illuminate\Suuport\Facades\DB DB::enableQueryLog(); 执行语句 dd(DB::getQueryLog());
  • 我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可: //app/Http/routes.php Route::get(‘/test-sql’, function() { DB::...
  • 主要介绍了Laravel框架实现利用监听器进行sql语句记录功能,结合实例形式分析了Laravel框架监听器的创建、引入以及使用监听器记录sql语句的相关操作技巧,需要的朋友可以参考下
  • 打开app\Providers\AppServiceProvider.PHP,在boot... 5.2以下版本 // 先引入DB use DB; // 或者直接使用 \DB:: DB::listen(function($sql, $bindings, $time) { dump($sql); }); use DB; // ...
  • 本文介绍了Laravel5.* 打印出执行的sql语句的方法,分享给大家,具体如下: 打开app\Providers\AppServiceProvider.PHP,在boot方法中添加如下内容 5.2以下版本 // 先引入DB use DB; // 或者直接使用 \DB:: DB::...
  • 利用监听器进行sql语句记录 1、监听sql语句的事件类已经定义,直接创建监听器类即可: # 监听sql make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted 1 2 2、监听器类代码 ./app/...
  • Capsule::connection('default')->listen(function ($query) { //这里是执行sql后的监听回调方法 $sql = vsprintf(str_replace("?", "'%s'", $query->sql), $query->bindings) . " [" . $query->time . ' ms] '; //...
  • 开发调试时,可能需要调试某个节点SQL完整的执行语句 而Laravel/Lumen默认提供的在查看上不够直观,例如:select * from TableName where id = ? 参数值以?作为占位,显得不够直观 基于上述情况,我们可以扩展DB的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,080
精华内容 432
关键字:

laravel引入sql