Я хотел бы регистрировать запросы 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()
Метод начнет слушать события. Однако это не работает, потому что я никогда не получаю никаких событий запроса. Думаю ли я в правильном направлении?
Вы можете прослушать запрос БД, используя это:
DB::listen(function($query) {
// Log this
\Log::info($query->sql);});
Для тех, кто заинтересован
Слушайте для освещения вопросов
// routes web.php
\Event::listen('illuminate.query', function($sql) {
var_dump($sql);
\Log::info($sql);
});
И для большего и продвинутого Lisen Вот