Главная » Статьи » Документация » Для разработчиков
Категории

Составление запросов

Для манипулирования данными, в основном, используется всего несколько методов. Сейчас я постараюсь дать максимально исчерпывающую информацию о них.

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());?>
Для разработчиков Просмотров: 1503 Комментариев: 0