Russian translation fixes and updates [skip ci]

This commit is contained in:
Aleksandr
2015-10-27 10:44:36 +06:00
committed by Alexander Makarov
parent 4c452d1b04
commit f3fddb2993
6 changed files with 128 additions and 71 deletions

View File

@ -140,7 +140,7 @@ $config = [
При использовании [виджетов](structure-widgets.md) часто возникает необходимость изменить параметры виджета с помощью
конфигурации. Для создания виджета можно использовать два метода: [[yii\base\Widget::widget()]] и
[[yii\base\Widget::beginWidget()]]. Оба метода принимают конфигурацию в виде PHP массива:
[[yii\base\Widget::begin()]]. Оба метода принимают конфигурацию в виде PHP массива:
```php
use yii\widgets\Menu;

View File

@ -5,16 +5,15 @@
[Статья Мартина Фаулера](http://martinfowler.com/articles/injection.html) хорошо объясняет, почему контейнер внедрения зависимостей является полезным. Здесь, преимущественно, будет объясняться использование контейнера внедрения зависимостей, предоставляемого в Yii.
Внедрение зависимостей <span id="dependency-injection"></span>
--------------------
Yii обеспечивает функционал контейнера внедрения зависимостей через класс [[yii\di\Container]]. Он поддерживает следующие виды внедрения зависимостей:
* Внедрение зависимости через конструктор.
* Внедрение зависимости через сеттер и свойство.
* Внедрение зависимости через PHP callback.
* Внедрение зависимости через конструктор;
* Внедрение зависимости через сеттер и свойство;
* Внедрение зависимости через PHP callback;
* Внедрение зависимости через действие контроллера.
### Внедрение зависимости через конструктор <span id="constructor-injection"></span>
@ -71,10 +70,8 @@ $container->get('Foo', [], [
]);
```
> Информация: Метод [[yii\di\Container::get()]] третьим аргументом принимает массив конфигурации, которым инициализируется
создаваемый объект. Если класс реализует интерфейс [[yii\base\Configurable]] (например, [[yii\base\Object]]),
то массив конфигурации передается в последний параметр конструктора класса. Иначе конфигурация применяется уже *после*
создания объекта.
> Информация: Метод [[yii\di\Container::get()]] третьим аргументом принимает массив конфигурации, которым инициализируется создаваемый объект. Если класс реализует интерфейс [[yii\base\Configurable]] (например, [[yii\base\Object]]), то массив конфигурации передается в последний параметр конструктора класса. Иначе конфигурация применяется уже *после* создания объекта.
### Внедрение зависимости через PHP callback <span id="php-callable-injection"></span>
@ -100,28 +97,39 @@ class FooBuilder
{
public static function build()
{
return function () {
$foo = new Foo(new Bar);
// ... дополнительная инициализация
return $foo;
};
$foo = new Foo(new Bar);
// ... дополнительная инициализация ...
return $foo;
}
}
$container->set('Foo', FooBuilder::build());
$container->set('Foo', ['app\helper\FooBuilder', 'build']);
$foo = $container->get('Foo');
```
Как вы можете видеть, метод `FooBuilder::build()` возвращает анонимную функцию. Тот, кто будет настраивать класс `Foo`,
теперь не обязан знать, как этот класс устроен.
Теперь тот, кто будет настраивать класс `Foo`, не обязан знать, как этот класс устроен.
### Внедрение зависимости через действие контроллера <span id="controller-action-injection"></span>
Внедрение зависимости через действие контроллера - это специальный тип внедрения зависимостей, использующий указание типов параметров, принимаемых методом, исполняемый во время выполнения кода действия. Этот тип внедрения зависимостей помогает сделать контроллеры MVC *тонкими* и *легкими*, так как нет необходимости настраивать все возможные зависимости контроллера заранее.
```php
public function actionSend($email, EmailValidator $validator)
{
if ($validator->validate($email)) {
// ... отправка email
}
}
```
Регистрация зависимостей <span id="registering-dependencies"></span>
------------------------
Вы можете использовать [[yii\di\Container::set()]] для регистрации зависимостей. При регистрации требуется имя зависимости, а также определение зависимости.
Именем зависимости может быть имя класса, интерфейса или алиас, так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP callback'ом.
Вы можете использовать [[yii\di\Container::set()]] для регистрации зависимостей. При регистрации требуется имя зависимости, а также определение зависимости. Именем зависимости может быть имя класса, интерфейса или алиас,
так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP callback'ом.
```php
$container = new \yii\di\Container;
@ -269,7 +277,7 @@ $lister = new UserLister($finder);
Практическое использование <span id="practical-usage"></span>
---------------
Yii создаёт контейнер внедрения зависимостей когда вы подключаете файл `Yii.php` во [входном скрипте](structure-entry-scripts.md)
Yii создаёт контейнер внедрения зависимостей когда вы подключаете файл `Yii.php` во [входном скрипте](structure-entry-scripts.md)
вашего приложения. Контейнер внедрения зависимостей доступен через [[Yii::$container]]. При вызове [[Yii::createObject()]],
метод на самом деле вызовет метод контейнера [[yii\di\Container::get()|get()]], чтобы создать новый объект.
Как упомянуто выше, контейнер внедрения зависимостей автоматически разрешит зависимости (если таковые имеются) и внедрит их в только что созданный объект.

View File

@ -59,8 +59,7 @@ return [
> Подсказка: Вы можете настроить несколько компонентов подключения, если в вашем приложении используется несколько баз данных.
При настройке подключения, вы должны обязательно указывать Имя Источника Данных (DSN) через параметр [[yii\db\Connection::dsn|dsn]].
Формат DSN отличается для разных баз данных. По
The format of DSN varies for different databases. Дополнительное описание смотрите в [справочнике PHP](http://php.net/manual/ru/pdo.construct.php).
Формат DSN отличается для разных баз данных. Дополнительное описание смотрите в [справочнике PHP](http://php.net/manual/ru/pdo.construct.php).
Ниже представлены несколько примеров:
* MySQL, MariaDB: `mysql:host=localhost;dbname=mydatabase`
@ -73,7 +72,7 @@ The format of DSN varies for different databases. Дополнительное
* Oracle: `oci:dbname=//localhost:1521/mydatabase`
Заметьте, что если вы подключаетесь к базе данных через ODBC, вам необходимо указать свойство [[yii\db\Connection::driverName]],
чтобы Yii знал какой тип базы данных используется. Например:
чтобы Yii знал какой тип базы данных используется. Например,
```php
'db' => [
@ -142,7 +141,8 @@ $count = $db->createCommand('SELECT COUNT(*) FROM post')
> Подсказка: Если вам необходимо выполнить SQL запрос сразу после установки соединения (например, для установки
> временной зоны или кодировки), вы можете сделать это в обработчике события [[yii\db\Connection::EVENT_AFTER_OPEN]].
> Например:
> Например,
```php
return [
// ...
@ -165,7 +165,7 @@ return [
### Привязка параметров <span id="binding-parameters"></span>
При создании команды из SQL запроса с параметрами, вы почти всегда должны использовать привязку параметров для
предотвращения атак через SQL инъекции. Например:
предотвращения атак через SQL инъекции. Например,
```php
$post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
@ -175,7 +175,7 @@ $post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
```
В SQL запрос, вы можете встраивать один или несколько маркеров (например `:id` в примере выше). Маркеры должны быть
строкой начинающейся с двоеточия. Далее вам нужно вызвать один из следующих методов для привязки значений к параметрам:
строкой, начинающейся с двоеточия. Далее вам нужно вызвать один из следующих методов для привязки значений к параметрам:
* [[yii\db\Command::bindValue()|bindValue()]]: привязка одного параметра по значению
* [[yii\db\Command::bindValues()|bindValues()]]: привязка нескольких параметров в одном вызове
@ -197,7 +197,7 @@ $post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status',
Привязка переменных реализована через [подготавливаемые запросы](http://php.net/manual/ru/mysqli.quickstart.prepared-statements.php).
Помимо предотвращения атак путём SQL инъекций, это увеличивает производительность, так как запрос подготавливается
один раз, а потом выполняется много раз с разными параметрами. Например:
один раз, а потом выполняется много раз с разными параметрами. Например,
```php
$command = $db->createCommand('SELECT * FROM post WHERE id=:id');
@ -227,7 +227,7 @@ $post2 = $command->queryOne();
### Выполнение Не-SELECT запросов <span id="non-select-queries"></span>
В методах `queryXyz()`, описанных в предыдущих разделах, вызываются SELECT запросы для извлечения данных из базы.
Для запросов не возвращающих данные, вы должны использовать метод [[yii\db\Command::execute()]]. Например:
Для запросов не возвращающих данные, вы должны использовать метод [[yii\db\Command::execute()]]. Например,
```php
$db->createCommand('UPDATE post SET status=1 WHERE id=1')
@ -238,7 +238,7 @@ $db->createCommand('UPDATE post SET status=1 WHERE id=1')
Для запросов INSERT, UPDATE и DELETE, вместо написания чистого SQL, вы можете вызвать методы [[yii\db\Command::insert()|insert()]],
[[yii\db\Command::update()|update()]], [[yii\db\Command::delete()|delete()]], соответственно, для создания указанных
SQL конструкций. Например:
SQL конструкций. Например,
```php
// INSERT (table name, column values)
@ -307,7 +307,7 @@ return [
Затем в коде, когда вам нужно ссылаться на таблицу, имя которой содержит такой префикс, используйте синтаксис `{{%table name}}`.
Символ процента будет автоматический заменён на префикс таблицы, который вы указали во время конфигурации соединения с
базой данных. Например:
базой данных. Например,
```php
// для MySQL будет выполнен следующий SQL: SELECT COUNT(`id`) FROM `tbl_employee`
@ -426,12 +426,12 @@ try {
try {
$db->createCommand($sql2)->execute();
$innerTransaction->commit();
} catch (Exception $e) {
} catch (\Exception $e) {
$innerTransaction->rollBack();
}
$outerTransaction->commit();
} catch (Exception $e) {
} catch (\Exception $e) {
$outerTransaction->rollBack();
}
```
@ -478,7 +478,7 @@ try {
Вышеуказанная конфигурация определяет систему с одним мастером и несколькими подчинёнными. Один из подчинённых
будет подключен и использован для чтения, в то время как мастер будет использоваться для запросов записи.
Такое разделение чтения и записи будет осуществлено автоматический с указанной конфигурацией. Например:
Такое разделение чтения и записи будет осуществлено автоматический с указанной конфигурацией. Например,
```php
// создание экземпляра соединения, использующего вышеуказанную конфигурацию
@ -506,7 +506,7 @@ $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
Это означает, что если сервер не ответит за 10 секунд, он будет считаться "мёртвым". Вы можете отрегулировать
этот параметр исходя из настроек вашей среды.
Вы также можете настроить несколько основных и несколько подчинённых серверов. Например:
Вы также можете настроить несколько основных и несколько подчинённых серверов. Например,
```php
[
@ -625,7 +625,7 @@ $db->createCommand()->createTable('post', [
```
Вы также сможете получить описание схемы таблицы через вызов метода [[yii\db\Connection::getTableSchema()|getTableSchema()]].
Например:
Например,
```php
$table = $db->getTableSchema('post');

View File

@ -1,7 +1,7 @@
Миграции Баз Данных
==================
В ходе разработки и ведения баз данных приложений, которые управляют данными, структуры используемых баз данных развиваются как и исходный код приложений. Например, при разработке приложения, в будущем может оказаться необходимой новая таблица; уже после того, как приложение будет развернуто в рабочем режиме (продакшене), также может быть обнаружено, что для повышения производительности запросов должен быть создан определённый индекс; и так далее.
В ходе разработки и ведения баз данных приложений, которые управляют данными, структуры используемых баз данных развиваются, как и исходный код приложений. Например, при разработке приложения, в будущем может оказаться необходимой новая таблица; уже после того, как приложение будет развернуто в рабочем режиме (продакшене), также может быть обнаружено, что для повышения производительности запросов должен быть создан определённый индекс; и так далее.
В связи с тем, что изменение структуры базы данных часто требует изменение исходного кода, yii поддерживает так
называемую возможность *миграции баз данных*, которая позволяет отслеживать изменения в базах данных при помощи терминов *миграции баз данных*, которые являются системой контроля версий вместе с исходным кодом.
@ -28,6 +28,9 @@ Yii предоставляет набор инструментов для миг
Все эти инструменты доступны через команду `yii migrate`. В этом разделе мы опишем подробно, как выполнять различные задачи, используя эти инструменты. Вы также можете сами посмотреть как использовать каждый отдельный инструмент при помощи команды `yii help migrate`.
> Подсказка: Миграции могут не только изменять схему базы данных, но и приводить данные в соответствие с новой схемой, создавать иерархию RBAC или очищать кеш.
## Создание миграций <span id="creating-migrations"></span>
Чтобы создать новую миграцию, выполните следующую команду:
@ -49,20 +52,32 @@ yii migrate/create create_news_table
```php
<?php
use yii\db\Schema;
use yii\db\Migration;
class m150101_185401_create_news_table extends Migration
{
public function up()
{
}
public function down()
{
echo "m101129_185401_create_news_table cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}
```
@ -76,11 +91,12 @@ class m150101_185401_create_news_table extends Migration
Следующий код показывает как можно реализовать класс миграции, чтобы создать таблицу `news`:
```php
<?php
use yii\db\Schema;
use yii\db\Migration;
class m150101_185401_create_news_table extends \yii\db\Migration
class m150101_185401_create_news_table extends Migration
{
public function up()
{
@ -95,11 +111,10 @@ class m150101_185401_create_news_table extends \yii\db\Migration
{
$this->dropTable('news');
}
}
```
> Для справки: Не все миграции являются обратимыми. Например, если метод `up()` удаляет строку из таблицы, возможно что у вас уже не будет возможности вернуть эту строку методом `down()`. Иногда Вам может быть просто слишком лень реализовывать метод `down()`, в связи с тем, что это не очень распространено - откатывать миграции базы данных. В этом случае вы должны в методе `down()` вернуть `false`, чтобы указать, что миграция не является обратимой.
> Информация: Не все миграции являются обратимыми. Например, если метод `up()` удаляет строку из таблицы, возможно что у вас уже не будет возможности вернуть эту строку методом `down()`. Иногда Вам может быть просто слишком лень реализовывать метод `down()`, в связи с тем, что это не очень распространено - откатывать миграции базы данных. В этом случае вы должны в методе `down()` вернуть `false`, чтобы указать, что миграция не является обратимой.
Базовый класс миграций [[yii\db\Migration]] предоставляет подключение к базе данных через свойство [[yii\db\Migration::db|db]]. Вы можете использовать его для манипулирования схемой базы данных используя методы описанные в [работе со схемой базы данных](db-dao.md#database-schema).
@ -111,7 +126,36 @@ class m150101_185401_create_news_table extends \yii\db\Migration
Вы можете добавить дополнительные ограничения при использовании абстрактных типов. В приведенном выше примере, ` NOT NULL` добавляется к `Schema::TYPE_STRING` чтобы указать, что столбец не может быть NULL.
> Для справки: Сопоставление абстрактных типов и физических типов определяется свойством [[yii\db\QueryBuilder::$typeMap|$typeMap]] в каждом конкретном `QueryBuilder` классе.
> Информация: Сопоставление абстрактных типов и физических типов определяется свойством [[yii\db\QueryBuilder::$typeMap|$typeMap]] в каждом конкретном `QueryBuilder` классе.
Начиная с версии 2.0.6, появился новый построитель схем, который является более удобным инструментом для описания структуры столбцов.
Теперь, при написании миграций, можно использовать такой код:
```php
<?php
use yii\db\Migration;
class m150101_185401_create_news_table extends Migration
{
public function up()
{
$this->createTable('news', [
'id' => $this->primaryKey(),
'title' => $this->string()->notNull(),
'content' => $this->text(),
]);
}
public function down()
{
$this->dropTable('news');
}
}
```
Весь список методов описания типов столбцов доступен в API документации [[yii\db\SchemaBuilderTrait]].
### Транзакции Миграций <span id="transactional-migrations"></span>
@ -122,8 +166,8 @@ class m150101_185401_create_news_table extends \yii\db\Migration
В следующем примере, помимо создания таблицы `news` мы также вставляем в этой таблице начальную строку.
```php
<?php
use yii\db\Schema;
use yii\db\Migration;
class m150101_185401_create_news_table extends Migration
@ -131,11 +175,11 @@ class m150101_185401_create_news_table extends Migration
public function safeUp()
{
$this->createTable('news', [
'id' => 'pk',
'title' => Schema::TYPE_STRING . ' NOT NULL',
'content' => Schema::TYPE_TEXT,
'id' => $this->primaryKey(),
'title' => $this->string()->notNull(),
'content' => $this->text(),
]);
$this->insert('news', [
'title' => 'test 1',
'content' => 'content 1',
@ -184,7 +228,10 @@ class m150101_185401_create_news_table extends Migration
* [[yii\db\Migration::createIndex()|createIndex()]]: создание индекса
* [[yii\db\Migration::dropIndex()|dropIndex()]]: удаление индекса
> Примечание: [[yii\db\Migration]] не предоставляет методы запросов к базе данных. Это потому, что обычно не требуется отображать дополнительные сообщения об извлечении данных из базы данных. Это также, потому, что можно использовать более мощный [Построитель Запросов](db-query-builder.md) для построения и выполнения сложных запросов.
> Информация: [[yii\db\Migration]] не предоставляет методы запросов к базе данных. Это потому, что обычно не требуется отображать дополнительные сообщения об извлечении данных из базы данных. Это также, потому, что можно использовать более мощный [Построитель Запросов](db-query-builder.md) для построения и выполнения сложных запросов.
> Примечание: при обработке данных внутри миграции, может показаться, что использование существующих классов [Active Record](db-active-record.md), со всей их готовой бизнес логикой, будет разумным решением и упросит код миграции. Однако, следует помнить, что код миграций не должен меняться, по определению. В отличии от миграций, бизнес логика приложений часто изменяется. Это может привести к нарушению работы миграции при определённых изменениях на уровне Active Record. Поэтому рекомендуется делать миграции независимыми от других частей приложения, таких как классы Active Record.
## Применение Миграций <span id="applying-migrations"></span>
@ -327,7 +374,8 @@ yii migrate --db=db2
Иногда может случиться так, что Вы захотите применить *некоторые* из миграций к одной базе данных, а некоторые другие к другой базе данных. Для достижения этой цели, при реализации класса миграции, необходимо явно указать идентификатор ID компонента базы данных, который миграция будет использовать, следующим образом:
```php
use yii\db\Schema;
<?php
use yii\db\Migration;
class m150101_185401_create_news_table extends Migration

View File

@ -2,8 +2,8 @@
====================
Построенный поверх [DAO](db-dao.md), построитель запросов позволяет конструировать SQL выражения в программируемом и
независимом от СУБД виде. В сравнении с написанием чистого SQL, использование построителя помогает вам писать
более читаемый связанный с SQL код и генерировать более безопасные SQL выражения.
независимом от СУБД виде. В сравнении с написанием чистого SQL выражения, использование построителя помогает
вам писать более читаемый связанный с SQL код и генерировать более безопасные SQL выражения.
Использование построителя запросов, как правило, включает два этапа:
@ -31,7 +31,7 @@ LIMIT 10
```
> Информация: В основном вы будете работать с [[yii\db\Query]] вместо [[yii\db\QueryBuilder]]. Последний вызывается
неявно при вызове одного из методов запроса. [[yii\db\QueryBuilder]] это класс отвечающий за генерацию зависимого
неявно при вызове одного из методов запроса. [[yii\db\QueryBuilder]] это класс, отвечающий за генерацию зависимого
от СУБД SQL выражения (такие как экранирование имён таблиц/столбцов) из независимых от СУБД объектов [[yii\db\Query]].
@ -58,7 +58,7 @@ $query->select(['id', 'email']);
$query->select('id, email');
```
Имена столбцов могут быть выбраны вместе с префиксами таблиц и/или алиасами столбцов, также как при записи обычного SQL.
Имена столбцов могут быть выбраны вместе с префиксами таблиц и/или алиасами столбцов, также как при записи обычного SQL выражения.
Например,
```php
@ -80,14 +80,14 @@ $query->select(['user_id' => 'user.id', 'email']);
выбрать *все* столбцы.
Кроме имён столбцов, вы можете также использовать SQL выражения. Вы должны использовать формат массива для использования
выражений, которые содержат запятые для предотвращения некорректного автоматического экранирования. Например:
выражений, которые содержат запятые для предотвращения некорректного автоматического экранирования. Например,
```php
$query->select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']);
```
Начиная с версии 2.0.1, вы также можете использовать подзапросы. Вы должны указывать каждый подзапрос в выражении как
объект [[yii\db\Query]]. Например:
объект [[yii\db\Query]]. Например,
```php
$subQuery = (new Query())->select('COUNT(*)')->from('user');
@ -103,7 +103,7 @@ $query = (new Query())->select(['id', 'count' => $subQuery])->from('post');
$query->select('user_id')->distinct();
```
Вы можете вызвать [[yii\db\Query::addSelect()|addSelect()]] для добавления полей. Например:
Вы можете вызвать [[yii\db\Query::addSelect()|addSelect()]] для добавления полей. Например,
```php
$query->select(['id', 'username'])
@ -113,7 +113,7 @@ $query->select(['id', 'username'])
### [[yii\db\Query::from()|from()]] <span id="from"></span>
Метод [[yii\db\Query::from()|from()]] указывает фрагмент `FROM` SQL запроса. Например:
Метод [[yii\db\Query::from()|from()]] указывает фрагмент `FROM` SQL запроса. Например,
```php
// SELECT * FROM `user`
@ -121,7 +121,7 @@ $query->from('user');
```
Вы можете указать имена таблиц в виде строки или массива. Имена таблиц могут содержать префикс схемы и/или алиасы
таблиц, как при написании обычного SQL. Например:
таблиц, как при написании обычного SQL выражения. Например,
```php
$query->from(['public.user u', 'public.post p']);
@ -137,7 +137,7 @@ $query->from('public.user u, public.post p');
$query->from(['u' => 'public.user', 'p' => 'public.post']);
```
Кроме имён таблиц, вы можете, также как и в select, указывать подзапросы в виде объекта [[yii\db\Query]].
Кроме имён таблиц, вы можете, также, как и в select, указывать подзапросы в виде объекта [[yii\db\Query]].
```php
$subQuery = (new Query())->select('id')->from('user')->where('status=1');
@ -152,14 +152,14 @@ $query->from(['u' => $subQuery]);
Метод [[yii\db\Query::where()|where()]] определяет фрагмент `WHERE` SQL выражения. Вы можете использовать один из
трёх форматов:
- строковый формат, например: `'status=1'`
- формат массива, например: `['status' => 1, 'type' => 2]`
- формат операторов, например: `['like', 'name', 'test']`
- строковый формат, Например, `'status=1'`
- формат массива, Например, `['status' => 1, 'type' => 2]`
- формат операторов, Например, `['like', 'name', 'test']`
#### Строковый формат <span id="string-format"></span>
Строковый формат - это лучший выбор для простых условий. Он работает так, будто вы просто пишете SQL запрос. Например:
Строковый формат - это лучший выбор для простых условий. Он работает так, будто вы просто пишете SQL запрос. Например,
```php
$query->where('status=1');
@ -281,7 +281,7 @@ $query->where(['id' => $userQuery]);
Вы можете использовать [[yii\db\Query::andWhere()|andWhere()]] или [[yii\db\Query::orWhere()|orWhere()]] для добавления
дополнительных условий. Вы можете использовать эти вызовы несколько раз для добавления нескольких условий.
Например:
Например,
```php
$status = 10;
@ -317,7 +317,7 @@ $query->filterWhere([
```
Единственное отличие между [[yii\db\Query::filterWhere()|filterWhere()]] и [[yii\db\Query::where()|where()]]
заключается в игнорировании пустых значений переданных в условие в [форме массива](#hash-format). Таким образом
заключается в игнорировании пустых значений, переданных в условие в [форме массива](#hash-format). Таким образом
если `$email` будет пустым, а `$username` нет, то приведённый выше код сформирует `...WHERE username=:username`.
> Информация: значение признаётся пустым, если это null, пустой массив, пустая строка или строка состоящая из одних пробельных символов.
@ -339,7 +339,7 @@ $query->orderBy([
]);
```
В данном коде, ключи массива это имена столбцов, а значения массива это соответствующее направление сортировки.
В данном коде, ключи массива - это имена столбцов, а значения массива - это соответствующее направление сортировки.
PHP константа `SORT_ASC` определяет сортировку по возрастанию и `SORT_DESC` сортировка по умолчанию.
Если `ORDER BY` содержит только простые имена столбцов, вы можете определить их с помощью столбцов, также
@ -369,7 +369,7 @@ $query->groupBy(['id', 'status']);
```
Если фрагмент `GROUP BY` содержит только простые имена столбцов, вы можете указать их используя строку, также как в
обычном SQL.
обычном SQL выражении.
```php
$query->groupBy('id, status');
@ -501,7 +501,7 @@ $query1->union($query2);
[[yii\db\Query::max()|max($q)]], [[yii\db\Query::min()|min($q)]]. Параметр `$q` обязателен для этих методов и могут
содержать либо имя столбца, либо выражение БД.
Например:
Например,
```php
// SELECT `id`, `email` FROM `user`
@ -520,7 +520,7 @@ $row = (new \yii\db\Query())
> Примечание: метод [[yii\db\Query::one()|one()]] вернёт только первую строку результата запроса. Он НЕ добавляет
`LIMIT 1` в генерируемый SQL. Это хорошо и предпочтительно если вы знаете, что запрос вернёт только одну или несколько
строк данных (например, при запросе по первичному ключу). Однако, если запрос потенциально может вернут много
строк данных, вы должны вызвать `limit(1)` для повышения производительности, Например:
строк данных, вы должны вызвать `limit(1)` для повышения производительности, Например,
`(new \yii\db\Query())->from('user')->limit(1)->one()`.
Все методы выборки могут получать необязательный параметр `$db`, представляющий [[yii\db\Connection|соединение с БД]],
@ -566,7 +566,7 @@ $rows = $command->queryAll();
### Индексация результатов запроса <span id="indexing-query-results"></span>
При вызове [[yii\db\Query::all()|all()]] возвращается массив строк индексированный последовательными целыми числами.
Иногда вам может потребоваться индексировать его по другому, например сделать индекс по указанному столбцу или
Иногда вам может потребоваться индексировать его по-другому, например, сделать индекс по указанному столбцу или
значением выражения. Вы можете реализовать такое поведение через вызов [[yii\db\Query::indexBy()|indexBy()]] перед
вызовом [[yii\db\Query::all()|all()]].