Data access objects - uniqcle/Yii2 GitHub Wiki
- Data access objects использование Объектно-ориентированного подхода при работе с БД.
- Query Builder - построен поверх DAO
- Active Record реализация шаблона AR
Объекты доступа к данным DAO обеспечивают ООП подход для доступа к реляционным БД. Простой и производительный подход, по сравнению с другими способами.
1. Подключение к БД
с помощью класса yii\db\Connection
$db = new \yii\db\Connection([
'dsn' => 'mysql:host=db:3306;dbname=yii2advanced',
'username' => 'mysqluser',
'password' => 'mysqluser',
'charset' => 'utf8',
]);
2. Создание команды
$sql = "SELECT * FROM cities; ";
$command = new \yii\db\Command([
'db' => $db,
'sql' => $sql
]);
3. Выполнение команды
$arrResults = $command->queryAll();
в контроллере frontend/controllers/DaoController.php
namespace frontend\controllers;
use Yii;
use yii\web\Controller;
class DaoController extends Controller
{
public function actionIndex(){
# Отдельное подключение
//Подключение к БД
$db = new \yii\db\Connection([
'dsn' => 'mysql:host=db:3306;dbname=yii2advanced',
'username' => 'mysqluser',
'password' => 'mysqluser',
'charset' => 'utf8',
]);
//2. Создание команды
$sql = "SELECT * FROM cities; ";
$command = new \yii\db\Command([
'db' => $db,
'sql' => $sql
]);
//3. Выполнение команды
$arrResult = $command->queryAll();
# Общее подключение через \yii\db
$arrResult2 = Yii::$app->db->createCommand($sql);
# Использование нескольких подключений к разным БД
$arrResult2 = Yii::$app->db2->createCommand($sql);
return $this->render('index');
}
}
Варианты использования
- Отдельное подключение.
Если компонент приложения не зависит от других частей приложения и соединение устанавливается 1 раз. Как в выше случае
- Общее подключение.
Если работа идет централизованно. Если скрипты имеют одну и ту же БД. Выносим в общее подключение - в компонент
\yii\db
.
Настройка происходит в
common/config/main-local.php
Вызов
Yii::$app->db->createCommand($sql);
- Использование нескольких подключений к разным БД
В файле
config/common/main-local.php
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=db:3306;dbname=yii2advanced',
'username' => 'mysqluser',
'password' => 'mysqluser',
'charset' => 'utf8',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=db:3306;dbname=yii2basic',
'username' => 'user',
'password' => 'user',
'charset' => 'utf8',
],
...
Вызов
Yii::$app->db2->createCommand($sql);
Выполнение SELECT-запросов
- queryAll()
$sql = "SELECT * FROM cities; ";
$result = Yii::$app->db->createCommand($sql)->queryAll();
- queryColumn()
$sql = "SELECT name FROM cities; ";
$result = Yii::$app->db->createCommand($sql)->queryColumn();
- queryOne()
$sql = "SELECT * FROM cities WHERE id = 3; ";
$result = Yii::$app->db->createCommand($sql)->queryOne();
- queryScalar()
$sql = "SELECT COUNT(*) as count FROM cities; ";
$result = Yii::$app->db->createCommand($sql)->queryScalar();
Выполнение не SELECT запросов
$sql= "INSERT, UPDATE, DELETE..."
...->createCommand($sql)->execute();