Vừa qua mình có code một dự án với thằng Flarum. Phải công nhận là thằng này có nhiều cái hay để mình học hỏi nhưng cũng phải nói là nó vần còn nhiều cái tù (vì cũng còn đang là beta-6 mà).
Trong quá trình phát triển, mình cần phải debug với câu truy vấn SQL của nó. Lúc đầu mình cũng lúng túng, chưa biết làm như nào. Sau khi tìm hiểu thì mình thấy nó cũng dùng Eloquent - bộ thư viện database của Laravel.
1
2
3
4
5
6
7
8
// class Flarum\Foundation\Application, method registerCoreContainerAliases
'app' => ['Flarum\Foundation\Application', 'Illuminate\Contracts\Container\Container', 'Illuminate\Contracts\Foundation\Application'],
'blade.compiler' => 'Illuminate\View\Compilers\BladeCompiler',
'cache' => ['Illuminate\Cache\CacheManager', 'Illuminate\Contracts\Cache\Factory'],
'cache.store' => ['Illuminate\Cache\Repository', 'Illuminate\Contracts\Cache\Repository'],
'config' => ['Illuminate\Config\Repository', 'Illuminate\Contracts\Config\Repository'],
'db' => 'Illuminate\Database\DatabaseManager',
'events' => ['Illuminate\Events\Dispatcher', 'Illuminate\Contracts\Events\Dispatcher'],
Sử dụng kiến thức liệt kê nhanh các câu truy vấn SQL trong Laravel mà bài trước mình đã chia sẻ, mình đã giải quyết được vấn đề này như sau:
Đầu tiên bạn cho phép composer sử dụng local package ở trong thư mục extensions
.
Mình sử dụng repository type path bằng cách thêm đoạn code sau vào file composer.json
của project.
Bạn tham khảo ở đây
1
2
3
4
5
6
7
8
9
10
{
// ...
"repositories": [
{
"type": "path",
"url": "extensions/*/"
}
],
// ...
}
Sau đó mình tạo extension
1
2
$ mkdir -p extensions/flarum-ext-log-sql-queries
$ touch extensions/flarum-ext-log-sql-queries/{bootstrap.php,composer.json}
Nội dung của 2 file bootstrap.php
và composer.json
như sau:
1
2
3
4
5
6
7
8
9
<?php
// bootstrap.php
return function () {
if (app('app')->inDebugMode()) {
app('db')->connection()->listen(function ($query, $bindings) {
app('log')->debug(sprintf("%s\n%s\n", $query, var_export($bindings, true)));
});
}
}
Nội dung file composer.json
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"name": "oanhnn/flarum-ext-log-sql-queries",
"description": "Quickly log sql queries",
"type": "flarum-extension",
"require": {
"flarum/core": "^0.1.0-beta.6"
},
"extra": {
"flarum-extension": {
"title": "Quickly log sql queries",
"icon": {
"name": "file-text-o",
"backgroundColor": "#D13E32",
"color": "#fdb1b6"
}
}
}
}
Cài đặt extension.
1
$ composer require "oanhnn/flarum-ext-log-sql-queries":"*@dev" --dev
Sau đó vào trang admin và bật extension đó lên.
1
2
3
4
5
6
7
8
9
10
$ tail -f /path/to/project/storage/logs/flarum.log
[2017-01-19 04:20:44] production.DEBUG: select `groups`.*, `users_groups`.`user_id` as `pivot_user_id`, `users_groups`.`group_id` as `pivot_group_id` from `groups` inner join `users_groups` on `groups`.`id` = `users_groups`.`group_id` where `users_groups`.`user_id` = ?
array (
0 => 2,
)
[2017-01-19 04:20:44] production.DEBUG: select * from `pages` where `is_hidden` = ? order by `time` desc limit 21
array (
0 => 0,
)
Chúc các bạn thỏa mái hơn khi code!
Comments