-
Notifications
You must be signed in to change notification settings - Fork 39
Db Table
Класс, который необходим для полноценной работы Db\Row
.
Почему данные методы не объеденены в
Db\Row
для получения полноценного Active Record? А у нас разделения труда, да и таблица статична, лишнего не кушает
Из обязательного - первичные ключи, опционально указываем имя таблицы и имя класса Db\Row
(по умолчанию они вычисляются из имени класса, путём преобразования CamelCase в underscore)
namespace Application\Users;
class Table extends \Bluz\Db\Table
{
/**
* Table
*
* @var string
*/
protected $name = 'users';
/**
* Primary key(s)
* @var array
*/
protected $primary = array('id');
}
Рекомендую указывать имя таблицы в явном виде, и наглядно и ресурсы не кушает
Если используете PostgreSQL то следует так же указать свойство
$sequence
По умолчанию, запрос к БД для вытаскивания сущностей имеет следующий вид:
SELECT * FROM %%table%%
Его можно изменить переопределив select:
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
:
$row = Pages\Table::create();
В качестве параметра ожидает массив данных в формате ключ-значение, возвращает lastInsertId
// INSERT INTO `pages` SET `userId` = 12, `status` = 'public', `title` = 'example'
$primary = Pages\Table::insert(['userId' => 12, 'status' => 'public', 'title' => 'example']);
В качестве параметров ожидает массив данных в формате ключ-значение и массив условий для построения условия WHERE
// UPDATE `pages` SET `userId` = 12 WHERE `userId` = 13 AND `status` = 'public'
Pages\Table::update(['userId' => 12], ['userId' => 13, 'status' => 'public']);
Если параметр $where окажется пуст, то словите Exception
Удаляем записи:
// DELETE FROM `pages` WHERE `userId` = 13 AND `status` = 'public'
Pages\Table::delete(['userId' => 13, 'status' => 'public']);
Если параметр $where окажется пуст, то словите Exception
Получение выборки по SQL запросу, параметры в данном случае это значения для подстановки:
// SELECT * FROM `pages` WHERE `userId` = 13 AND `status` = 'public'
Pages\Table::fetch('SELECT * FROM `pages` WHERE `userId` = ? AND `status` = ?', [13, 'public']);
Получение всех записей из таблицы, без условий и ограничений.
Будьте внимательней с данный методом
Поиск по primary key осуществляется посредством метода find()
:
use Application\Users;
$users = Users\Table::find(123);
$users = Users\Table::find(123, 234, 345);
Для составных ключей следует использовать массивы:
use Application\Users;
$users = Users\Table::find([123, 'abc']);
$users = Users\Table::find([123, 'abc'], [234, 'def'], [345, 'ghi']);
Данный метод всегда возвращает Rowset, для поиска единственной Row следует использовать метод findRow
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
:
// 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)
:
// 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