Слушайте события laravel ‘световые сигналы.query’ в консольных командах ремесленника

Я хотел бы регистрировать запросы Laravel. Я знаю, что мы можем прослушивать запросы laravel, используя следующий код:

Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
// Log queries
};

Я хотел бы поместить приведенный выше код в команду ремесленника, чтобы прослушивать запросы только во время работы этой программы, а не все время. Я написал следующий код.

<?php
// ... namespace and use statements

class QueryListener extends Command
{
protected $signature = 'pots:query-listen';
protected $description = 'Runs forever and logs all database queries.';

public function __construct()
{
parent::__construct();
}

private function logDatabaseQueries()
{
Event::listen('illuminate.query', function ($query, $bindings, $time, $name) {
Log::info(PHP_EOL.$query.PHP_EOL);
});
}

public function handle()
{
$this->logDatabaseQueries();

echo 'Listening for database queries: Type \'stop\' to stop execution.'.PHP_EOL;
$stopExecution = false;

while ($stopExecution === false) {
$handle = fopen('php://stdin', 'r');
$line = fgets($handle);

if (strtolower(trim($line)) === 'stop') {
fclose($handle);
echo 'Aborting script.'.PHP_EOL;
$stopExecution = true;
}
}
}
}

Я ожидал, что как только я выполню эту команду, используя artisan, logDatabaseQueries() Метод начнет слушать события. Однако это не работает, потому что я никогда не получаю никаких событий запроса. Думаю ли я в правильном направлении?

0

Решение

Вы можете прослушать запрос БД, используя это:

DB::listen(function($query) {

// Log this
\Log::info($query->sql);});
2

Другие решения

Для тех, кто заинтересован
Слушайте для освещения вопросов

// routes web.php
\Event::listen('illuminate.query', function($sql) {
var_dump($sql);
\Log::info($sql);
});

И для большего и продвинутого Lisen Вот

0

По вопросам рекламы [email protected]