use App\Order;
public function show(Order $order){
$data = $order->all();
return dd($order->getQueryLog());
Есть ли способ отобразить запрос, созданный Eloquent в Laravel?
Я пытался getQueryLog();
, но это не работает
use App\Order;
public function show(Order $order){
$data = $order->all();
return dd($order->getQueryLog());
Есть ли способ отобразить запрос, созданный Eloquent в Laravel?
Я пытался getQueryLog();
, но это не работает
Сначала вам нужно включить журнал запросов это можно сделать, используя
DB::connection()->enableQueryLog();
то вы можете использовать нижеприведенный код для просмотра журнала запросов
$queries = DB::getQueryLog();
если вы хотите увидеть последний выполненный запрос
$last_query = end($queries);
чтобы узнать больше о регистрации, см. https://laravel.com/docs/5.0/database#query-logging
Пример
public function show(Order $order){
\DB::connection()->enableQueryLog();
$data = $order->all();
$queries = \DB::getQueryLog();
return dd($queries);
}
Чтобы использовать getQueryLog()
, вам нужно сначала включить его:
DB::enableQueryLog();
DB::getQueryLog();
Если вы хотите видеть реальные запросы, вы можете использовать Laravel Debugbar, он покажет все реальные запросы Laravel, созданные во время текущего запроса.
Иногда ->toSql()
также полезен.
Работает на 5.6, примерно так в AppServiceProvider :: boot()
// Log all DB SELECT statements
// @codeCoverageIgnoreStart
if (!app()->environment('testing') && config('app.log_sql')) {
DB::listen(function ($query) {
if (preg_match('/^select/', $query->sql)) {
Log::info('sql: ' . $query->sql);
// Also available are $query->bindings and $query->time.
}
});
}
Затем в config/app.php, чтобы было легко включить/отключить изменение .env
'log_sql' => env('LOG_SQL'),
Все кредиты: https://arjunphp.com/laravel-5-5-log-eloquent-queries/
И это может быть проанализировано для уникальных запросов с помощью:
grep ") sql:" laravel.log | sed -e "s#.*select\(.*\)\[\]#select\1#" | sort -u
Я знаю, что это старый вопрос, но он может помочь другим, у которых была такая же проблема, как и у меня.
Если вы используете соединение, отличное от соединения по умолчанию, вы должны указать его для правильного ведения журнала запросов.
\DB::connection('YourConnection')->enableQueryLog();
$test = MyModel::all();
$queries = \DB::connection('YourConnection')->getQueryLog();
dd($queries);
laravel.log
, используйте следующий способ.namespace App\Providers;
use DB;
use Log;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
DB::listen(function($query) {
Log::info(
$query->sql,
$query->bindings,
$query->time
);
});
}
// ...
}
Вы можете использовать ::toSql()
или ->toSql()
, как показано ниже:
use App\Order;
public function show(Order $order){
return $order::toSql();
Или
use App\Order;
public function show(Order $order){
return $order::where("id", "<>", 0)->toSql();
Возможно, вам придется включить журнал запросов:
DB::enableQueryLog();