Категории
Составление запросов
Для манипулирования данными, в основном, используется всего несколько методов. Сейчас я постараюсь дать максимально исчерпывающую информацию о них.
Возвращает массив записей из БД. Так как все модели наследуются от FpsModel, значит метод getCollection доступен в любой моделе. Метод возвращает массив объектов при удачном выполнении и false при неудаче.
$conditions - условия выборки
$additional_params - дополнительные параметры(page, limit, order, group)
Возвращает одну запись из БД по ее ID. Так как все модели наследуются от FpsModel, значит метод getById доступен в любой моделе. Метод возвращает объект при удачном выполнении и false при неудаче.
$id - ID нужной записи
Используется для связывания моделей. Например, если мы хотим получить не только новости, но и связанных с ними авторов. Так как все модели наследуются от FpsModel, значит метод bindModel доступен в любой моделе. Метод возвращает true при удачном выполнении и false при неудаче.
$model - модель, которую мы хотим прибиндить(сюда следует передавать ключи массива $RelatedEntities из моделей)
$params - необязательные параметры where(Например: array('id' => 1)). Эти параметры будут использованы для связи записей из разных таблиц вместе с, изначально заданными, в $RelatedEntities.
* - подразумевает, что каждая сущность должна обладать таким методом. При вызове сохраняет текущее состояние сущности в базу данных. Если запись новая, то метод возвращает ID созданной записи. При неудаче возвращает false.
* - подразумевает, что каждая сущность должна обладать таким методом.
Превратиться в такой SQL запрос:
Обязательных полей как таковых нет, можно написать хоть такой запрос:
getCollection
FpsModel::getCollection([array $conditions[, array $additional_params]])Возвращает массив записей из БД. Так как все модели наследуются от FpsModel, значит метод getCollection доступен в любой моделе. Метод возвращает массив объектов при удачном выполнении и false при неудаче.
$conditions - условия выборки
$additional_params - дополнительные параметры(page, limit, order, group)
getById
FpsModel::getById(integer $id)Возвращает одну запись из БД по ее ID. Так как все модели наследуются от FpsModel, значит метод getById доступен в любой моделе. Метод возвращает объект при удачном выполнении и false при неудаче.
$id - ID нужной записи
bindModel
FpsModel::bindModel(string $model[, array $params])Используется для связывания моделей. Например, если мы хотим получить не только новости, но и связанных с ними авторов. Так как все модели наследуются от FpsModel, значит метод bindModel доступен в любой моделе. Метод возвращает true при удачном выполнении и false при неудаче.
$model - модель, которую мы хотим прибиндить(сюда следует передавать ключи массива $RelatedEntities из моделей)
$params - необязательные параметры where(Например: array('id' => 1)). Эти параметры будут использованы для связи записей из разных таблиц вместе с, изначально заданными, в $RelatedEntities.
save
*Entity::save()* - подразумевает, что каждая сущность должна обладать таким методом. При вызове сохраняет текущее состояние сущности в базу данных. Если запись новая, то метод возвращает ID созданной записи. При неудаче возвращает false.
delete
*Entity::delete()* - подразумевает, что каждая сущность должна обладать таким методом.
Примеры использования
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php // Выбрать новость с ID = 10
$Model = new NewsModel;
$entity = $Model->getById(10);
// Изменить заголовок новости и сохранить ее
$entity->setTitle('New title');
$entity->save();
// Выбрать 10 статей и их авторов
$Model = new StatModel;
$Model->bindModel('author');
$articles = $Model->getCollection(array(), array('limit' => 10));
// То же самое, но кроме авторов мы так же получим комментарии и аттачи к каждой статье
$Model = new StatModel;
$Model->bindModel('author');
$Model->bindModel('comments_');
$Model->bindModel('attaches');
$articles = $Model->getCollection(array(), array('limit' => 10));
// Найти пользователя с ID = 3 и удалить его
$Model = new UsersModel;
$user = $Model->getById(3);
$user->delete();?>
Пример составления запросов через DbDriver
Такой запрос через DbDriver: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php $entities = $Register['DB']->select('table', DB_ALL, array(
'cond' => (
'a.id = 1', // эти 2 строки эквивалентны
'id' => 1
),
'joins' => array(
array(
'type' => 'LEFT',
'table' => 'table2',
'alias' => 'b',
'cond' => 'b.id = a.parent_id'
)
),
'page' => 1,
'limit' => 10,
'order' => 'date',
'group' => 'title',
'alias' => 'a',
'fields' => array('a.id', 'a.title')
));?>
Превратиться в такой SQL запрос:
SELECT a.id, a.title FROM table a LEFT JOIN table2 b ON b.id = a.parent_id WHERE a.id = 1 LIMIT 0, 10 GROUP BY a.title ORDER BY a.date
Обязательных полей как таковых нет, можно написать хоть такой запрос:
1
2
<?php // Вернет все записи из table(SELECT * FROM table)
$entities = $Register['DB']->select('table', DB_ALL, array());?>