private function getDataGridItems(Request $request) { $dataGridConfig = $this->getScaffoldConfig()->getDataGridConfig(); $dataGridFilterConfig = $this->getScaffoldConfig()->getDataGridFilterConfig(); $conditions = ['LIMIT' => $request->query('length', $dataGridConfig->getLimit()), 'OFFSET' => (int) $request->query('start', 0), 'ORDER' => []]; if ($dataGridConfig->hasContains()) { $conditions['CONTAIN'] = $dataGridConfig->getContains(); } $conditions = array_merge($dataGridConfig->getSpecialConditions(), $conditions); $searchInfo = $request->query('search'); if (!empty($searchInfo) && !empty($searchInfo['value'])) { $search = json_decode($searchInfo['value'], true); if (!empty($search) && is_array($search) && !empty($search['r'])) { $conditions = array_replace($dataGridFilterConfig->buildConditionsFromSearchRules($search), $conditions); } } $order = $request->query('order', [['column' => $dataGridConfig->getOrderBy(), 'dir' => $dataGridConfig->getOrderDirection()]]); $columns = $request->query('columns', array()); /** @var array $order */ foreach ($order as $config) { if (is_numeric($config['column']) && !empty($columns[$config['column']])) { $config['column'] = $columns[$config['column']]['name']; } if (!empty($config['column']) && !is_numeric($config['column'])) { if ($config['column'] instanceof DbExpr) { $conditions['ORDER'][] = DbExpr::create($config['column']->get() . ' ' . $config['dir']); } else { $conditions['ORDER'][$config['column']] = $config['dir']; } } } $result = $this->getModel()->selectWithCount(array_keys($dataGridConfig->getDbFields()), $conditions); if ($result['count'] > 0) { $result['records'] = $dataGridConfig->prepareRecords($result['records']); } return ['draw' => $request->query('draw'), 'recordsTotal' => $result['count'], 'recordsFiltered' => $result['count'], 'data' => $result['records']]; }