要将数据库查询的结果转换为数组格式,可以通过监听器来监听 Hyperf\Database\Events\StatementPrepared 事件,并在事件处理程序中进行转换。
首先,创建一个监听器类,实现 Hyperf\Event\Contract\ListenerInterface 接口,并在 process 方法中进行转换操作。例如,创建一个名为 QueryResultToArrayListener 的监听器类:
<?php
namespace App\Listener;
use Hyperf\Database\Events\StatementPrepared;
use Hyperf\Event\Annotation\Listener;
use Hyperf\Event\Contract\ListenerInterface;
/**
* @Listener
*/
class QueryResultToArrayListener implements ListenerInterface
{
public function listen(): array
{
return [
StatementPrepared::class,
];
}
public function process(object $event): void
{
if ($event instanceof StatementPrepared) {
$event->statement->setFetchMode(\PDO::FETCH_ASSOC);
}
}
}
然后,在 config/autoload/listeners.php 配置文件中注册该监听器:
<?php
use App\Listener\QueryResultToArrayListener;
return [
\App\Listener\QueryResultToArrayListener::class,
];
这样,当每次执行数据库查询时,StatementPrepared 事件都会被触发,从而将查询结果转换为数组格式。