View source
<?php
namespace Drupal\database_test\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Database\Connection;
use Drupal\Core\Database\Query\PagerSelectExtender;
use Drupal\Core\Database\Query\TableSortExtender;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
class DatabaseTestController extends ControllerBase {
protected $connection;
public function __construct(Connection $connection) {
$this->connection = $connection;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('database'));
}
public function pagerQueryEven($limit) {
$query = $this->connection
->select('test', 't');
$query
->fields('t', [
'name',
])
->orderBy('age');
$query = $query
->extend(PagerSelectExtender::class)
->limit($limit);
$names = $query
->execute()
->fetchCol();
return new JsonResponse([
'names' => $names,
]);
}
public function pagerQueryOdd($limit) {
$query = $this->connection
->select('test_task', 't');
$query
->fields('t', [
'task',
])
->orderBy('pid');
$query = $query
->extend(PagerSelectExtender::class)
->limit($limit);
$names = $query
->execute()
->fetchCol();
return new JsonResponse([
'names' => $names,
]);
}
public function testTablesort() {
$header = [
'tid' => [
'data' => t('Task ID'),
'field' => 'tid',
'sort' => 'desc',
],
'pid' => [
'data' => t('Person ID'),
'field' => 'pid',
],
'task' => [
'data' => t('Task'),
'field' => 'task',
],
'priority' => [
'data' => t('Priority'),
'field' => 'priority',
],
];
$query = $this->connection
->select('test_task', 't');
$query
->fields('t', [
'tid',
'pid',
'task',
'priority',
]);
$query = $query
->extend(TableSortExtender::class)
->orderByHeader($header);
$tasks = $query
->execute()
->fetchAll();
return new JsonResponse([
'tasks' => $tasks,
]);
}
public function testTablesortFirst() {
$header = [
'tid' => [
'data' => t('Task ID'),
'field' => 'tid',
'sort' => 'desc',
],
'pid' => [
'data' => t('Person ID'),
'field' => 'pid',
],
'task' => [
'data' => t('Task'),
'field' => 'task',
],
'priority' => [
'data' => t('Priority'),
'field' => 'priority',
],
];
$query = $this->connection
->select('test_task', 't');
$query
->fields('t', [
'tid',
'pid',
'task',
'priority',
]);
$query = $query
->extend(TableSortExtender::class)
->orderByHeader($header)
->orderBy('priority');
$tasks = $query
->execute()
->fetchAll();
return new JsonResponse([
'tasks' => $tasks,
]);
}
}