Silex — Какой самый быстрый способ сериализации результатов базы данных в JSON?

На данный момент я получаю записи из БД, используя DBAL а затем я преобразую каждую строку в соответствующий объект. Каждый объект добавляется в массив и, наконец, это преобразован в json с помощью функции json ().
Пример кода:

class MyController extends BaseController {
public function getById(Request $request, Application $app, $id) {
$this->app = $app;
$sql = "SELECT * FROM table ...";
$stmt = $app['db']->prepare($sql);
$stmt->execute();
$obj = $stmt->fetchAll(\PDO::FETCH_ASSOC);
return $app->json($this->convert($obj));
}


public function convert($resultset) {
$result = array();

foreach ($resultset as $key => $row) {
$myObj = new MyObj();
$myObj->setId($row['id']);
// and so on
}

return $result;
}
}

Можно ли изменить этот метод сериализации, чтобы он был быстрее? Положите дело, я должен отправить клиент REST сто тысяч предметов, есть своего рода режим streming, как для файлов так что я могу избежать буферизации всех результатов во временном массиве?
Спасибо

1

Решение

Если ваши свойства класса отображаются на имена столбцов в базе данных, вы можете получить объекты напрямую, используя PDO::FETCH_CLASS, Это не даст вам никакой потоковой передачи, но пропустит весь этап конвертации:

public function getById(Request $request, Application $app, $id) {
$this->app = $app;
$sql = "SELECT * FROM table ...";
$stmt = $app['db']->prepare($sql);
$stmt->execute();

// Generate an array of the required objects
$arr = $stmt->fetchAll(\PDO::FETCH_CLASS, "MyObj");

// Encode the array
return $app->json($arr);
}
2

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

Других решений пока нет …

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