Yii2 фильтр по связанным таблицам

В Yii 2.x используется 3 типа запросов к базе данных, это: объекты доступа к данным (DAO), построитель запросов (Query) и объектно-ориентированный интерфейс манипуляцией базы данных (Active Record).

Рассмотрим список функций которые позволяют осуществлять выборку данных, для этого рассмотрим простую таблицу Country (Страны). Таблица включает в себя поля номер (id), название страны (name), количество жителей (number) и площадь (area).

Рассмотрим основной список функций для выборки данных из таблицы Country. По правилам MVC вывод информации осуществляется в представлении, но для того чтобы не загромождать описание методов и проверить результат, выведем данные в контроллере.

find()

find() осуществляет поиск записи из таблицы по ключевому полю. Выберем запись из таблицы страны и выведем название страны

//запрос $model = Country::find()->one(); // вывод данных if($model){ echo $model->name; }

Результатом выборки: Россия

one()

one() выборка одной записи из таблицы

all()

all() выборка всех записей таблицы. Выведем всю таблицу страны 

//запрос $model = Country::find()->all(); // вывод данных if($model){ foreach ($model as $m){ echo $m->id; echo $m->name; echo $m->area; echo $m->number; } }

Результат выборки: Все данные из таблицы Country

Select()

select() осуществляет выборку определенных колонок таблицы. Выведем все названия стран и площадь стран.

//запрос $model = Country::find()->select('name, area')->all(); // вывод данных if($model){ foreach ($model as $m){ echo $m->name; echo $m->area; } }

Результат выборки: Все страны и площади всех стран

Where(), orWhere(), andWhere

where() условие для выборки. Выведем страну у которой id=4

$id = 4; //запрос $model = Country::find()->where('id = :id', [':id' => $id])->one(); // вывод данных if($model){ echo $model->name; }

Результат выборки: США

Выберем страну у которой id=1 и площадь составляет 17125407 

$id = 1; $area = "17125407"; //запрос $model = Country::find()->where('id = :id', [':id' => $id])->andWhere('area = :area', [':area' => $area])->one(); // вывод данных if($model){ echo $model->name; }

Результат выборки: Россия

Выберем страны у которой id=1 и площадь составляет 238391

$id = 1; $area = "238391"; //запрос $model = Country::find()->where('id = :id', [':id' => $id])->orWhere('area = :area', [':area' => $area])->all(); // вывод данных if($model){ foreach ($model as $m){ echo $m->name; } }

Результат выборки: Россия и Румыния

Множественное условие

where() условие для выборки. Выведем страну у которой id=4 и количество жителей 81459000

//запрос $model = Country::find()->where(['id' => 4, 'area' => 81459000])->one(); // вывод данных if($model){ echo $model->name; }

Результат выборки: Германия

Count()

count() осуществляет подсчет количества записей. Подсчитаем количество строк в таблице Country

//запрос $model = Country::find()->count(); if($model){ echo $model; }

Результат выборки: 4

OrderBy()

orderBy()  осуществляет сортировку записей. Отсортируем  страны по алфавитному порядку.

//запрос $model = Country::find()->orderby(['name'=>SORT_ASC])->all(); // вывод данных if($model){ foreach ($model as $m){ echo $m->name; } }

Результат выборки: Германия Россия Румыния США

AsArray()

asArray() осуществляет преобразование данных в массив. Переведем данные в массив и выведем страны

//запрос $model = Country::find()->asArray()->all(); // вывод данных if($model){ foreach ($model as $m) echo $m["name"]; }

Результат выборки:  Россия Румыния США Германия

indexBy()

indexBy() осуществляет индексацию по определенному столбцу. Сделаем индексацию по столбцу id

//запрос $model = Country::find()->indexBy('id')->all();

limit()

limit() определяет количество выбираемых записей.

offset()

limit() определяет c какой записи будет выборка. Выберем 2 страны начиная с третьей.

//запрос $model = Country::find()->limit(2)->offset(2)->all(); // вывод данных if($model){ foreach ($model as $m) echo $m->name; }

Результат выборки:  США Германия

like

like устанавливает соответствие строки с шаблонами. Выберем страны в встречается буква м.

//запрос $model = Country::find()->where(['LIKE', 'name', 'м'])->all(); // вывод данных if($model){ foreach ($model as $m) echo $m->name; }

Результат выборки:  Румыния Германия

in, not in

in множественное условие выборки. Выберем страны id=1,id=2,id=3.

//запрос $model = Country::find()->where(['in', 'id', [1,2,3]])->all(); // вывод данных if($model){ foreach ($model as $m) echo $m->name; }

Результат выборки:  Россия Румыния США

Выберем страны у которых номена id не равен 1, не равен 2, не равен 3

//запрос $model = Country::find()->where(['not in', 'id', [1,2,3]])->all(); // вывод данных if($model){ foreach ($model as $m) echo $m->name; }

Результат выборки:  Германия

between()

between() выбираем значения между определенными значениями. Выберем страны у которых номер стоит между 1 и 3 (крайние значения 1 и 3 включаются в выборку).

//запрос $model = Country::find()->where(['id between 1 and 3']))->all(); // вывод данных if($model){ foreach ($model as $m) echo $m->name; }

Результат выборки:  Россия Румыния США

groupBy()

groupBy() группирует значения если они одинаковые. Сгруппируем страны по полю name

//запрос $model = Country::find()->groupBy('name')->all(); // вывод данных if($model){ foreach ($model as $m) echo $m->name; }

Результат выборки:  Россия Румыния США Германия

having()

having() аналог оператора where(), только оператор having() работает с агрегатными функциями  count(), min(), max(), avg(), sum()

addParams()

addParams() добавляет параметр в условие. выберем страну у которой id=1 

//запрос $model = Country::find()->where('id = :id')->addParams([':id' => $id])->one(); // вывод данных if($model){ echo $model->name; }

Результат выборки:  Россия

findBySql()

findBySql() выборка с помощью sql запроса. Выберем страны с численностью населения 146519759 и 322369319 человек

//запрос $sql = 'Select name from Country where area = 146519759 and area = 322369319 ' $model = Country::findbysql($sql)->all(); // вывод данных if($model){ foreach ($model as $m) echo $model->name; }

Результат выборки:  Россия США

В этой статье мы рассмотрели список методов, которые осуществляют выборку данных при работе с моделью.

Вы можете авторизоваться на сайте через:
Vkontakte
Источник: http://www.webapplex.ru/rabota-s-bazoj-dannyix-v-yii-2.x-%28chast-1%29



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Yii 2 : Сортировка и фильтр gridview по связанным и вычисляемым полям Изделия из бисер для начинающих

Yii2 фильтр по связанным таблицам Yii2 фильтр по связанным таблицам Yii2 фильтр по связанным таблицам Yii2 фильтр по связанным таблицам Yii2 фильтр по связанным таблицам Yii2 фильтр по связанным таблицам Yii2 фильтр по связанным таблицам

ШОКИРУЮЩИЕ НОВОСТИ