目前,我使用DBAL从db检索记录,然后转换相应对象中的每一行。每个对象都被附加到一个数组中,最后使用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客户端十万对象,是否有一种像文件一样的流模式,这样我就可以避免在临时数组中缓冲所有结果?由于
如果您的类属性映射到数据库中的列名,您可以直接使用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);
}