Как правильно сформировать запрос в базу данных yii2?

Для формирования запросов в базу данных в Yii2 используются ActiveRecord и Query Builder. Оба этих подхода позволяют выполнять запросы без непосредственного написания SQL-кода, что облегчает их чтение и поддержку.

Активная запись (ActiveRecord) - это шаблон проектирования, который предоставляет интерфейс для взаимодействия с базой данных через объекты модели. Объекты модели представляют собой записи в таблице базы данных. При использовании ActiveRecord, выполнение запросов осуществляется посредством методов, предоставляемых моделью.

Примеры использования ActiveRecord для формирования запросов:

1. Выборка всех записей из таблицы:

$users = User::find()->all();

2. Выборка одной записи по условию:

$user = User::findOne(['id' => 1]);

3. Выборка записей с применением условий и сортировкой:

$users = User::find()
    ->where(['status' => 1])
    ->orderBy('username')
    ->all();

4. Вставка новой записи:

$user = new User();
$user->username = 'John';
$user->save();

5. Обновление существующей записи:

$user = User::findOne(['id' => 1]);
$user->username = 'Jane';
$user->save();

6. Удаление записи:

$user = User::findOne(['id' => 1]);
$user->delete();

Query Builder - это более гибкий подход, который позволяет формировать сложные запросы, используя цепочку методов. Query Builder строит запрос на основе предоставленной информации о таблице, условиях, сортировке и других параметрах.

Примеры использования Query Builder для формирования запросов:

1. Простой SELECT:

$query = (new yiidbQuery())
    ->select('*')
    ->from('user')
    ->where(['status' => 1])
    ->orderBy('username');
$users = $query->all();

2. INSERT:

$query = Yii::$app->db->createCommand()->insert('user', [
    'username' => 'John',
    'email' => '[email protected]',
    'status' => 1,
]);
$query->execute();

3. UPDATE:

$query = Yii::$app->db->createCommand()->update('user', [
    'username' => 'Jane',
    'email' => '[email protected]',
], 'id = :id', [':id' => 1]);
$query->execute();

4. DELETE:

$query = Yii::$app->db->createCommand()->delete('user', 'id = :id', [':id' => 1]);
$query->execute();

Оба подхода имеют свои преимущества и недостатки, и выбор между ними зависит от конкретных требований проекта. ActiveRecord обеспечивает более простой и интуитивно понятный интерфейс, но может быть менее гибким в сложных случаях. Query Builder, с другой стороны, позволяет более гибко управлять составлением запросов, но его использование может повлечь за собой более сложный и громоздкий код. Выбор зависит от вашего стиля кодирования, предпочтений и требований проекта.