Jump to main content Jump to doc navigation

В этой статье мы поговорим о создании и удалении объектов (и соответствующих им строк в базе данных), а также о более сложных запросах.

Создание объектов

Создание объекта обрабатывается методом newObject. Предполагается, что объект, который вы пытаетесь создать, был правильно определен внутри вашей XML-схемы, и эта схема сгенерировала правильные файлы классов. Для простого примера мы можем взглянуть на встроенные объекты MODX.

// давайте создадим шаблон
$template = $modx->newObject('modTemplate');

// теперь давайте сохраним некоторые данные в полях
$template->set('templatename','TestTemplate');
$template->set('description','A test template.');

// мы могли бы также сделать это так:
$data = array(
    'templatename' => 'TestTemplate',
    'description' => 'A test template.',
);
$template->fromArray($data);

// хорошо, теперь мы готовы. давайте сохраним.
if ($template->save() === false) {
    die('An error occurred while saving!');
}

Строка никогда не добавляется в базу данных до тех пор, пока не будет запущена команда объекта save().

Удаление объекта

Чтобы удалить объект из базы данных, мы используем команду remove:

$template->remove();

Это также удалит любые составные отношения, определенные в схеме объекта. В предыдущем примере с modTemplates это объекты modTemplateVarTemplate, которые отображают шаблоны на телевизоры. Те будут каскадом и будут удалены.

Более сложные запросы

Итак, довольно скоро вам нужно будет выполнить несколько более сложных запросов, чем мы имели дело. Вот где появляется объект xPDOQuery. Это позволяет создавать абстрактные объекты запросов, которые эмулируют более сложные команды SQL. Итак, давайте попробуем получить третьи 10 ресурсов (то есть 21-30), упорядоченные по menuindex, которые либо 1) опубликованы и доступны для поиска, либо 2) созданы пользователем с именем пользователя 'george123'.

$c = $modx->newQuery('modResource');
$c->leftJoin('modUser','PublishedBy');
$c->where(array(
    'modResource.published' => 1,
    'modResource.searchable' => 1,
));
$c->orCondition(array(
    'PublishedBy.username' => 'george123',
),null,1);
$c->sortby('menuindex','ASC');
$c->limit(10,20);

$resources = $modx->getCollection('modResource',$c);

Несколько вещей, которые нужно отметить. Во-первых, обратите внимание, что innerJoin сначала передает имя класса, а затем псевдоним. И в orCondition, третий параметр - это номер группы, который эффективно группирует условия в соответствующие круглые скобки (первые 2 в первой группе в скобках, третьи в другой).

xPDOQuery поддерживает методы: join, rightJoin, leftJoin, innerJoin, andCondition, orCondition, sortby, groupby, limit, bindGraph, bindGraphNode, and select.

Очевидно, что вы можете сойти с ума со сложными запросами. Хорошая особенность xPDO в MODX состоит в том, что на самом деле существует масса различных способов сделать большинство вещей - вы также могли бы использовать $modx->getCollectionGraph и для этого.

В следующей статье, мы поговорим о том, как это используется в контексте процессоров MODX с JSON.

Смотрите также