-
Notifications
You must be signed in to change notification settings - Fork 37
Db Table
Класс, который необходим для полноценной работы Db\Row.
Почему данные методы не объеденены в
Db\Rowдля получения полноценного Active Record? А у нас разделения труда, да и таблица статична, лишнего не кушает
Из обязательного - первичные ключи, опционально указываем имя таблицы и имя класса Db\Row (по умолчанию они вычисляются из имени класса, путём преобразования CamelCase в underscore)
<?php
namespace Application\Users;
class Table extends \Bluz\Db\Table
{
/**
* Table
*
* @var string
*/
protected $table = 'users';
/**
* Primary key(s)
* @var array
*/
protected $primary = array('id');
}
Рекомендую указывать имя таблицы в явном виде, и наглядно и ресурсы не кушает
По умолчанию, запрос к БД для вытаскивания сущностей имеет следующий вид:
SELECT * FROM %%table%%
Его можно изменить переопределив select:
<?php
class Table extends \Bluz\Db\Table
{
protected $select = "
select
users.*
, g.name AS __groups_name
from users
left join groups g on users.group_id = g.id
";
}
Данный метод возвращает новый эксземпляр связанного Db\Row:
<?php
$row = Pages\Table::create();
В качестве параметра ожидает массив данных в формате ключ-значение, возвращает lastInsertId
<?php
// INSERT INTO `pages` SET `userId` = 12, `status` = 'public', `title` = 'example'
$primary = Pages\Table::insert(['userId' => 12, 'status' => 'public', 'title' => 'example']);
В качестве параметров ожидает массив данных в формате ключ-значение и массив условий для построения условия WHERE
<?php
// UPDATE `pages` SET `userId` = 12 WHERE `userId` = 13 AND `status` = 'public'
Pages\Table::update(['userId' => 12], ['userId' => 13, 'status' => 'public']);
Если параметр $where окажется пуст, то словите Exception
Удаляем записи:
<?php
// DELETE FROM `pages` WHERE `userId` = 13 AND `status` = 'public'
Pages\Table::delete(['userId' => 13, 'status' => 'public']);
Если параметр $where окажется пуст, то словите Exception
Получение выборки по SQL запросу, параметры в данном случае это значения для подстановки:
<?php
// SELECT * FROM `pages` WHERE `userId` = 13 AND `status` = 'public'
Pages\Table::fetch('SELECT * FROM `pages` WHERE `userId` = ? AND `status` = ?', [13, 'public']);
Получение всех записей из таблицы, без условий и ограничений.
Будьте внимательней с данный методом
Поиск по primary key осуществляется посредством метода find():
<?php
use Application\Users;
$users = Users\Table::find(123);
$users = Users\Table::find(123, 234, 345);
Для составных ключей следует использовать массивы:
<?php
use Application\Users;
$users = Users\Table::find([123, 'abc']);
$users = Users\Table::find([123, 'abc'], [234, 'def'], [345, 'ghi']);
Данный метод всегда возвращает Rowset, для поиска единственной Row следует использовать метод findRow
<?php
use Application\Users;
/**
* @var Users\Row $user
*/
$user = Users\Table::findRow(123);
// compound primary key
$user = Users\Table::findRow([123,'abc']);
В довесок к методам find() и findRow() есть методы findWhere() и findRowWhere(), которые позволяют прописать условие WHERE:
<?php
// WHERE alias = 'foo'
Pages\Table::findWhere(['alias'=>'foo']);
// WHERE alias = 'foo' OR 'alias' = 'bar'
Pages\Table::findWhere(['alias'=>'foo'], ['alias'=>'bar']);
// WHERE alias IN ('foo','bar');
Pages\Table::findWhere(['alias'=> ['foo', 'bar']]);
// WHERE (alias = 'foo' AND userId = 2) OR ('alias' = 'bar' AND userId = 4)
Pages\Table::findWhere(['alias'=>'foo', 'userId'=> 2], ['alias'=>'foo', 'userId'=>4]);
// WHERE alias IS NULL
Pages\Table::findWhere(['alias'=>null]);
Если параметры для условия не передать - словите Exception
Ещё один способ получить необходимой набор записей - использование конструктор запросов Db Query, но чтобы нам не надо было производить лишние махинации над ним, объект Db\Table уже имеет метод select(), который вернёт нам конструктор с предустановленным select($alias.'.*'), from($tableName) и setFetchType($rowClass):
<?php
// WHERE p.id = 42
Pages\Table::select()->where('p.id = ?', 42)->execute();
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View