Yii2 gridview + фильтрация без ActiverecordPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Yii2 gridview + фильтрация без Activerecord

Сообщение Anonymous »

У меня есть модель (но у меня нет таблицы, потому что я хочу выбрать информацию о самой базе данных): < /p>

Код: Выделить всё

namespace app\models;

use Yii;
use yii\base\Model;

class OracleTables extends Model {

public $table_name;

public static function getDb() {return Yii::$app->get('db_o');}
}
< /code>

контроллер: < /p>

namespace app\controllers;

use app\models\OracleTablesSearch;
use yii\web\Controller;
use yii\helpers\Url;
use dmstr\bootstrap\Tabs;

class OracleTablesController extends Controller {

public function actionIndex() {
$searchModel = new OracleTablesSearch;
$dataProvider = $searchModel->search($_GET);

Tabs::clearLocalStorage();

Url::remember();
\Yii::$app->session['__crudReturnUrl'] = null;

return $this->render('index', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
}

}
< /code>

Модель поиска: < /p>

namespace app\models;

use Yii;
use yii\base\Model;
use app\models\OracleTables;
use yii\data\SqlDataProvider;

class OracleTablesSearch extends OracleTables {

public function rules() {return [[['table_name'], 'safe'],];}

public function search($params) {
$totalCount = Yii::$app->db_o
->createCommand('SELECT COUNT(TABLE_NAME) FROM USER_TABLES WHERE NUM_ROWS > 0')
->queryScalar();

$dataProvider = new SqlDataProvider([
'db' => Yii::$app->db_o,
'sql' => 'SELECT TABLE_NAME FROM USER_TABLES WHERE NUM_ROWS > 0 ORDER BY TABLE_NAME ASC',
'totalCount' => $totalCount,
]);

$this->load($params);

return $dataProvider;
}

}
< /code>

файл представления: < /p>

GridView::widget([
'dataProvider' => $dataProvider,
'pager' => ['class' => yii\widgets\LinkPager::className(), 'firstPageLabel' => Yii::t('app', 'First'), 'lastPageLabel' => Yii::t('app', 'Last'),],
'filterModel' => $searchModel,
'tableOptions' => ['class' => 'table table-striped table-bordered table-hover'],
'headerRowOptions' => ['class' => 'x'],
'columns' => [
[
'attribute' => 'TABLE_NAME',
'contentOptions' => ['nowrap' => 'nowrap'],
'filter' => AutoComplete::widget([
'model' => $searchModel,
'attribute' => 'table_name',
'clientOptions' => [
'source' => [],
'autoFill' => true,
//'minLength' => 2
],
'options' => ['class' => 'form-control']
]),
],
],
]);
< /code>

работает, но без фильтрации, и я также хочу фильтрации. Я знаю, как заполнить источник фильтра, это не проблема. Проблема в том, что я не могу добавить $ sql-> andfilterwhere (['like', 'table_name', $ this-> table_name]); 
в модель поиска, потому что тогда мне нужно было бы перевести команду SQL снаружи Sqldataprovider , но тогда это больше не работает. Посмотрите на это, пожалуйста (модель поиска): < /p>

public function search($params) {
$totalCount = Yii::$app->db_o
->createCommand('SELECT COUNT(TABLE_NAME) FROM USER_TABLES WHERE NUM_ROWS > 0')
->queryScalar();
$sql = Yii::$app->db_o
->createCommand('SELECT TABLE_NAME FROM USER_TABLES WHERE NUM_ROWS > 0 ORDER BY TABLE_NAME ASC')
->queryColumn();

$dataProvider = new SqlDataProvider([
'db' => Yii::$app->db_o,
'sql' => $sql,
'totalCount' => $totalCount,
]);

$this->load($params);

$sql->andFilterWhere(['like', 'table_name', $this->table_name]);

return $dataProvider;
}
< /code>

Если я так делаю, я получаю следующее сообщение об ошибке: < /p>

php предупреждение < /strong> < /p>

preg_match () ожидает, что параметр 2 будет строкой, массив, указанный < /strong> < /p>

в ... \ vendor \ yiisoft \ yii2 \ data \ sqldataprovider.php < /p>


131} < /p>

$sql = $this->sql;
$orders = [];
$limit = $offset = null;

if ($sort !== false) {
$orders = $sort->getOrders();
$pattern = '/\s+order\s+by\s+([\w\s,\.]+)$/i';
if (preg_match($pattern, $sql, $matches)) {
array_unshift($orders, new Expression($matches[1]));
$sql = preg_replace($pattern, '', $sql);
}
}

if ($pagination !== false) {
$pagination->totalCount = $this->getTotalCount();
$limit = $pagination->getLimit();
$offset = $pagination->getOffset();
< /code>
< /blockquote>

Я не нахожу, о каком параметре он говорит. Или что за DataProvider еще мне следует использовать? Не могли бы вы указать мне в правильное направление? Большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/423 ... tiverecord
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблемы Activerecord Activerecord
    Anonymous » » в форуме Php
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Yii2: события ActiveRecord, которые срабатывают только по сценарию
    Anonymous » » в форуме Php
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Синтаксическая ошибка, неожиданная '' (T_ENCAPSED_AND_WHITESPACE) - Yii2, запрос ActiveRecord
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Синтаксическая ошибка, неожиданная '' (T_ENCAPSED_AND_WHITESPACE) - Yii2, запрос ActiveRecord
    Anonymous » » в форуме MySql
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Синтаксическая ошибка, неожиданная '' (T_ENCAPSED_AND_WHITESPACE) - Yii2, запрос ActiveRecord [дубликат]
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»