Объектом базы данных (DbObject) в Colibri называется Модель. Это не что иное как представление одной записи из таблицы ввиде экземпляра класса, свойства которого являются поля из БД.
- Унаследовать от Model (
extends Model) - Задать название таблицы (
protected static $tableName = 'table_name';) - Указать первичный ключ (
protected static $PKFieldName = ['primary_key_name_1', 'primary_key_name_2', ...];) - Преречислить поля из БД в виде свойств
- Указать коллеции (подробнее)
Пример:
class User extends Model
{
protected static $tableName = 'pfx_users';
protected static $PKFieldName = array('id');
public $id;
public $login;
public $password;
public $email;
protected $collections=array('posts'=>array('CUserPostsCollection',null));
} $user=new User();
$user->login = 'my_login';
$user->password = md5('my_password');
$user->email = 'user.mail@example.com';
$user->create(); // при неудаче бросает исключение
echo('inserted id: '.$user->id);Если в базе есть обязательное поле (например birthday), которое не было заполнено $user->birthday = new DateTime();,
будет выброшено исключение.
Если есть НЕобязательные поля, можно сохранить только обязазательные:
$user = new User();
$user->create(['login'=>'my_login', 'password'=>md5('my_password')]);или
User::saveNew(['login'=>'my_login', 'password'=>md5('my_password')]);После создания записи в базе посредством вызова метода Model::crete()
в поле первичного ключа, которое было указано в protected static $PKFieldName появляется id вставленной записи
// ...
...->create();
echo('inserted id: '.$user->id);Model::load загружает запись из БД и записывает значения полей в свойства Модели.
Выбрасывает исключение при ошибке.
$user = User::getById(44);если запись не найдена, выбрасывает Colibri\Database\Exception\NotFoundException
или
$user = new User();
$user->load(44);
// или:
$user = (new User())->load(44);load() возвращает сам объект или null, если запись не найдена.
То же самое проще:
$user = User::find(44);find() возвращает сам объект или null, если запись не найдена.
get() возвращает сам объект или выбрасывает Colibri\Database\Exception\NotFoundException, если запись не найдена.
$user = new User(44); $user = new User();
$user->load( ['login'=>'admin','password'=>'admin'] );load() возвращает сам объект или null, если запись не найдена.
или
$user = User::find(['login'=>'admin','password'=>'admin']);find() возвращает сам объект или null, если запись не найдена.
Эти примеры не загружают запись из БД ( не делают SELECT),
а сразу делают запрос на изменение записи (UPDATE):
$user = new User();
$user->login = 'new login';
$user->password = md5('new password');
$user->email = 'user.mail@example.com';
$user->id = 44;
$user->save(); $user = new User(); // not loaded
$user->id = 44;
$user->save( ['password'=>md5('new password')] );Метод delete() принимает id или array с условием, либо вызывается без параметров и берёт id из PK-пол(я/ей)
// запись из БД предварительно не загружается:
$user=new User();
$user->id = 44;
$user->delete();или
(new User())->delete(44); // запись из БД предварительно не загружаетсяили
// запись из БД предварительно не загружается:
(new Event())->delete([
'type' => 'system',
'date <' => Carbon::now()->subMonth()
]);