Часть 2
Последнее обновление Aug 26th, 2019 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$306 per month—let's make that $500!
Learn moreВ этой статье мы поговорим о создании и удалении объектов (и соответствующих им строк в базе данных), а также о более сложных запросах.
Создание объектов¶
Создание объекта обрабатывается методом 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
, которые отображают TV в шаблонах. Те будут каскадом и будут удалены.
Более сложные запросы¶
Итак, довольно скоро вам нужно будет выполнить несколько более сложных запросов, чем мы имели дело. Вот где появляется объект 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.
Смотрите также¶
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$306 per month—let's make that $500!
Learn more