在完成部分新功能的开发后,因为不知道Laravel的ORM有tranform的功能(参考:https://www.cnblogs.com/yjf512/p/4423931.html),所以增加了很多数据format的方法,所以打算把api执行后打印下sql看看有没有什么大问题

Laravel添加DB Listener

首先到Laravel加一个sql的监听器,把sql打印到/storage/logs/laravel.log里
1.到/app/Providers/EventProvider.php里增加

protected $listen = [
        'Illuminate\Database\Events\QueryExecuted' => [
            'App\Listeners\QueryListener'
        ]
    ];

2.到/app/Listeners新建QueryListener.php

<?php
namespace App\Listeners;

use Illuminate\Database\Events\QueryExecuted;
class QueryListener
{
    /**
     * QueryListener constructor.
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  QueryExecuted  $event
     * @return void
     */
    public function handle(QueryExecuted $event)
    {
        //
        $sql = str_replace("?", "'%s'", $event->sql);

        $log = vsprintf($sql, $event->bindings);
      
        logger()->info($log);
    }
}

完成了,刷新下页面或者请求下借口就能在/storage/logs/laravel.log看到。
注:某些编辑器(如PS、WS)只会打开前XXX行 好像不能全览。

关于MYSQL的索引

在拿SQL来进行explain时发现一个比较奇怪的情况
一个表有user_id package_id和其他的字段
当前表数据不多 十来条 大多数数据user_id=1 package_id没有重合
查询where user_id = 1时 explain的type是all ref是null
查询where package_id=12时 explain的type是ref ref是const
感觉到异样后我塞了十几条package_id=1的数据进去再where package_id = 1时type=all ref=null
好吧,想起以前学MYSQL好像讲过某些情况下MYSQL认为ALL快的话就会用ALL。
先标记一下一些疑问 有空再查下资料
1.这个是属于MYSQL的那部分功能/机制
2.在不同引擎是否有区分
3.支持的版本
4.简单了解其原理

标签: none

添加新评论