如何在 Backpack 中查看列表视图后面的 AJAX 查询?
How to see AJAX query behind list view in Backpack?
在 Backpack 4.1 中是否可以查看 运行 列表视图后面的实际查询,即 AJAX 查询?对调试很有用。
查看正在使用的查询生成器对象非常简单,您可以通过 $this->crud->query
在控制器中获取它。但是,在您的数据库 上获取将 运行 的实际查询,并为可能应用的任何 where 子句设置 PDO 绑定 等将需要一些设置。
你应该可以做到这一点:
1) 使用以下内容制作一个类似 app/Helpers/Database.php
的文件:
if (! function_exists('asSql')) {
/**
* Combines SQL and its bindings
*
* @param \Eloquent | \Illuminate\Database\Eloquent\Builder | \Illuminate\Database\Query\Builder $query
* @return string
*/
function asSql($query)
{
return vsprintf(str_replace('?', '%s', $query->toSql()), collect($query->getBindings())->map(static function ($binding) {
$binding = addslashes($binding);
return is_numeric($binding) ? $binding : "'{$binding}'";
})->toArray());
}
}
2) 在 app/Providers/AppServiceProvider.php
中添加这个以注册新的辅助方法:
/**
* Register services.
*
* @return void
*/
public function register()
{
// require all files in app/Helpers/ so their functions get added globally
foreach (glob(app_path('Helpers') . '/*.php') as $file) {
require_once $file;
}
}
3) 用phpstorm(或类似的IDE)在vendor/backpack/crud/src/app/Library/CrudPanel/Traits/Read.php->getEntries()
中设置断点
在此行设置断点$entries = $this->query->get();
如果你在 php 风暴中,加载列表页面并让断点命中,打开评估工具和 运行 asSql($this->query)
你将看到完全绑定的查询那将是 运行 获取您的记录。
像这样:
这是针对我的用户 CRUD 的查询,我在我的设置中添加了以下内容:
$this->crud->addClause('where', 'active', 1);
$this->crud->orderBy('email');
注意,这可能不会显示查询 运行 获取这些模型的关系(如果应用),在某些情况下会变得更加棘手。
如果你没有 运行宁 php 使用 xdebug 风暴,或者你只是不想在那里做,你也可以从你底部的 crud 控制器添加做这个 setupListOperation
类似
的方法
$sql = asSql($this->crud->query);
dd($sql);
在 Backpack 4.1 中是否可以查看 运行 列表视图后面的实际查询,即 AJAX 查询?对调试很有用。
查看正在使用的查询生成器对象非常简单,您可以通过 $this->crud->query
在控制器中获取它。但是,在您的数据库 上获取将 运行 的实际查询,并为可能应用的任何 where 子句设置 PDO 绑定 等将需要一些设置。
你应该可以做到这一点:
1) 使用以下内容制作一个类似 app/Helpers/Database.php
的文件:
if (! function_exists('asSql')) {
/**
* Combines SQL and its bindings
*
* @param \Eloquent | \Illuminate\Database\Eloquent\Builder | \Illuminate\Database\Query\Builder $query
* @return string
*/
function asSql($query)
{
return vsprintf(str_replace('?', '%s', $query->toSql()), collect($query->getBindings())->map(static function ($binding) {
$binding = addslashes($binding);
return is_numeric($binding) ? $binding : "'{$binding}'";
})->toArray());
}
}
2) 在 app/Providers/AppServiceProvider.php
中添加这个以注册新的辅助方法:
/**
* Register services.
*
* @return void
*/
public function register()
{
// require all files in app/Helpers/ so their functions get added globally
foreach (glob(app_path('Helpers') . '/*.php') as $file) {
require_once $file;
}
}
3) 用phpstorm(或类似的IDE)在vendor/backpack/crud/src/app/Library/CrudPanel/Traits/Read.php->getEntries()
中设置断点
在此行设置断点$entries = $this->query->get();
如果你在 php 风暴中,加载列表页面并让断点命中,打开评估工具和 运行 asSql($this->query)
你将看到完全绑定的查询那将是 运行 获取您的记录。
像这样:
这是针对我的用户 CRUD 的查询,我在我的设置中添加了以下内容:
$this->crud->addClause('where', 'active', 1);
$this->crud->orderBy('email');
注意,这可能不会显示查询 运行 获取这些模型的关系(如果应用),在某些情况下会变得更加棘手。
如果你没有 运行宁 php 使用 xdebug 风暴,或者你只是不想在那里做,你也可以从你底部的 crud 控制器添加做这个 setupListOperation
类似
$sql = asSql($this->crud->query);
dd($sql);