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

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

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

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

  1. Выборка всех записей из таблицы:
$users = User::find()->all();
  1. Выборка одной записи по условию:
$user = User::findOne(['id' => 1]);
  1. Выборка записей с применением условий и сортировкой:
$users = User::find()
    ->where(['status' => 1])
    ->orderBy('username')
    ->all();
  1. Вставка новой записи:
$user = new User();
$user->username = 'John';
$user->save();
  1. Обновление существующей записи:
$user = User::findOne(['id' => 1]);
$user->username = 'Jane';
$user->save();
  1. Удаление записи:
$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();
  1. INSERT:
$query = Yii::$app->db->createCommand()->insert('user', [
    'username' => 'John',
    'email' => 'john@example.com',
    'status' => 1,
]);
$query->execute();
  1. UPDATE:
$query = Yii::$app->db->createCommand()->update('user', [
    'username' => 'Jane',
    'email' => 'jane@example.com',
], 'id = :id', [':id' => 1]);
$query->execute();
  1. DELETE:
$query = Yii::$app->db->createCommand()->delete('user', 'id = :id', [':id' => 1]);
$query->execute();

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