-
Notifications
You must be signed in to change notification settings - Fork 39
Db Table
Аналогично Zend_Db_Table, связи не поддерживаются
Из обязательного - первичные ключи, опционально указываем имя таблицы и имя класса 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
В качестве параметров ожидает массив данных в формате ключ-значение и массив условий для построения условия WHERE
<?php
Pages\Table::update(['userId' => 12], ['userId' => 13, 'status' => 'public']);
Если параметр $where окажется пуст, то словите Exception
<?php
Pages\Table::delete(['userId' => 13, 'status' => 'public']);
Если параметр $where окажется пуст, то словите Exception
Поиск по 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]);
Ещё один способ получить необходимой набор записей - использование конструктор запросов 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