DRUPAL8模块开发 - DRUPAL8数据库API - 取(结果)到一个自定义对象中

翻译者:长风Drupal开发团队(成都长风云信息技术有限公司)

 

原文地址:https://www.drupal.org/docs/8/api/database-api/fetching-into-a-custom-class

Drupal开发中,查询可以基于自定义类获取到对象中。例如,如果我们有一个名为ExampleClass的类,下面的查询将返回示例类的对象。
$result = $connection->query("SELECT id, title FROM {example_table}", [], [
'fetch' => 'ExampleClass',
]);
如果该类具有一个 __construct() 方法,则对象将被创建,属性将被添加到对象中,然后调用 __construct() 方法。例如,如果您有以下类和查询。
class ExampleClass {
function __construct() {
// Do something
}
}
$result = $connection->query("SELECT id, title FROM {example_table}", [], [
'fetch' => 'ExampleClass',
]);
对象将被创建,ID和标题属性将被添加到对象中,然后将执行__construct() 。这些事件的顺序是由于PHP中的bug小于5.2的版本。

如果对象上有一个__construct() 方法,需要在属性添加到对象之前执行,下面的示例演示如何执行。
$result = $connection->query("SELECT id, title FROM {example_table}");
foreach ($result->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'ExampleClass') as $record) {
// Do something
}
传递到FETCHALL的参数可以以相同的方式获取。PDO::FETCHOL类告诉FETCHALL获取返回的结果集,并将值作为属性添加到ExampleClass类型的对象(第二个参数)。PDO::FETCHYPROSPSSHEAD告诉FETCHALL在调用了名为__construct()之后将结果集作为属性添加到对象中。