Skip to content
Anton edited this page Jun 6, 2013 · 16 revisions

Описание

Аналогично 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 $this->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 
";
}

Поиск по primary key

Поиск по 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():

<?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 LIKE ('some%')
Pages\Table::findWhere(['alias LIKE'=>'some%']);
// WHERE alias IS NULL
Pages\Table::findWhere(['alias'=>null]);

Clone this wiki locally