php debugbar,Laravel 调试工具 laravel-debugbar使用介绍

Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显示调试及错误信息以方便开发工具,就像php的高度式具一样了,我们下面来看Laravel 调试工具 laravel-debugbar使用.

给 Laravel 项目安装了 debugbar 调试工具,在 debug 模式下打开页面底部会出现一个工具条,点开可以查看各项性能统计,最重要的是打印页面执行的 sql 语句和调试内容。下面利用 debugbar 工具找到一个 sql 查询的优化点。

优化页面 sql 查询

这里有两个模型,目的地模型和游记模型,他们是一对多的关系,在目的地模型 Destination.php 的 Model 中关系定义如下:

PHP

/**

* 定义目的地-游记的一对多关系

* @return \Illuminate\Database\Eloquent\Relations\HasMany

*/

public function travel()

{

return $this->hasMany(Travel::class, 'destination_id');

}

为了统计每个目的地下有多少篇游记,用到了 Laravel 模型很好用的一个特性 appends,定义 appends 数组就是自定义了表字段:

PHP

/**

* 自定义字段

* @var array

*/

protected $appends = [

'url',

'first_travel_url',

'total',

];

这里 total 指的就是目的地下一共有多少篇游记,优化前的代码是这样的:

/**

* 目的地游记数

* @return mixed

*/

public function getTotalAttribute()

{

return $this->travel()->count();

}

这样就导致遍历目的地查询游记的总数,增加 sql 语句频次。这本来是个很好的特性,但是如果要额外查询数据库可能会增加查询开销。debugbar 工具在页面上打印了该页面执行的所有 sql 语句,如图:

1474566480_1804.png显然这里需要进行优化,需要用 group by 目的地的方式统计,只需要一条 sql 语句就可以了。

Laravel 中使用

用 group by 进行统计

在游记模型 Travel.php 的 Model 中增加一个方法:

/**

* 获取每个目的地的游记总数

* @return array

*/

public function getTravelNumsGroupByDestination()

{

$travelNums = [];

$result = $this->groupBy('destination_id')->get(['destination_id', DB::raw('count(*) as total')]);

foreach ($result as $item) {

$travelNums[$item->destination_id] = $item->total;

}

return $travelNums;

}

这里 $result 返回的是一个 Collection 对象,里面是 Travel 类的集合,实际上执行的 sql 语句是:select destination_id, count(*) as total from travel group by destination_id

group-by-select-count

在页面控制器 TravelController.php 的 index 方法中调用这个方法,然后赋值给模板即可。

PHP

/**

* 游记首页

* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View

*/

public function index()

{

$data = Cache::remember('travel.index', self::CACHE_TIME, function () {

$destinationList = $this->destination->getList(12);

$travelList = $this->travel->latest('begin_date')->take(12)->get();

$travelNums = $this->travel->getTravelNumsGroupByDestination();

return [

'destinationList' => $destinationList,

'travelList' => $travelList,

'travelNums' => $travelNums

];

});

return view('travel.index', $data);

}

这里把数据库的相关查询结果进行了缓存,只有在缓存过期会查询数据库。

在模板中做出相应的修改后,就完成了这个 sql 的性能优化,如果查询多的话这可以减少大量的 sql 查询。

优化后页面执行 sql 的情况:

1474566481_6221.png通过 debugbar 工具可以很好的掌握各项性能,不仅如此,他是个很好的调试工具,我们可以通过打印 log 的方式调试代码,也可以用 debugbar 提供的调试方法打印内容,很方便,使用 Laravel 开发必备的调试工具。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel提供了一些值得调试的工具,可以帮助您识别和解决应用程序中的问题。以下是一些常用的调试工具: 1. Laravel Debugbar:这是一个强大的调试工具,提供了一个直观的仪表板,显示有关应用程序请求、数据库查询、日志、性能指标等的详细信息。您可以使用Composer安装Debugbar,并将其添加到应用程序中,以便在开发环境中使用。 2. Tinker:Tinker是Laravel的交互式命令行工具,类似于PHP的REPL(Read-Eval-Print Loop)。您可以使用Tinker来测试和调试代码,执行各种操作,如查看数据库记录、调用模型方法等。通过运行`php artisan tinker`命令,您可以进入Tinker环境并与应用程序进行交互。 3. 日志记录:Laravel提供了灵活的日志记录功能,可以帮助您记录和检查应用程序的各种操作和事件。您可以使用`Log`门面或`logger`辅助函数来记录自定义日志消息。日志文件通常位于`storage/logs`目录下,您可以查看这些文件以了解应用程序的运行情况。 4. 异常处理:Laravel具有强大的异常处理机制,可以捕获和处理应用程序中的异常。当发生异常时,Laravel会生成一个详细的错误页面,并记录异常信息。您可以根据异常信息来识别问题的根本原因,并进行相应的修复。 5. 路由和中间件调试:Laravel的路由和中间件系统是应用程序的核心组件。您可以使用`php artisan route:list`命令来查看应用程序的所有路由,并检查它们的配置和处理逻辑。通过在中间件中添加调试语句,您可以跟踪请求在中间件堆栈中的执行过程。 6. 调试工具包:除了上述工具外,还有一些第三方调试工具包可用于Laravel应用程序。例如,Clockwork提供了一个强大的调试和性能分析工具,可以帮助您深入了解应用程序的运行情况。可以使用Composer安装这些工具包,并按照其文档进行配置和使用。 这些工具将帮助您在开发和调试过程中更好地理解和解决Laravel应用程序中的问题。根据您的需求和偏好,选择适合您的工具进行调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值