Jump to main content Jump to doc navigation

XPDOQuery расширяет класс xPDOCriteria и позволяет вам абстрагировать сложные запросы SQL в формат ООП. Это позволяет инкапсулировать вызовы SQL, чтобы они могли работать с несколькими типами баз данных, а также легко читаться и динамически создаваться.

  1. xPDOQuery.andCondition
  2. xPDOQuery.groupby
  3. xPDOQuery.innerJoin
  4. xPDOQuery.leftJoin
  5. xPDOQuery.limit
  6. xPDOQuery.orCondition
  7. xPDOQuery.rightJoin
  8. xPDOQuery.select
  9. xPDOQuery.setClassAlias
  10. xPDOQuery.sortby
  11. xPDOQuery.where

Примеры

Возьмите первые 4 коробки с:

  1. Владельцы, которые имеют букву «а» в своих именах
  2. Ширина не менее 10
  3. Высота не 2
  4. Цвет red, blue или green
  5. Отсортировано по имени ящика по возрастанию, а затем по высоте ящика по убыванию
$query = $xpdo->newQuery('Box');
// Помните: синтаксис здесь это имя класса, ваш псевдоним. Обратите внимание, что фильтры используют псевдоним.
$query->innerJoin('Owner','User');
// Владелец на самом деле является объектом User, определенным как Владелец в псевдониме отношения
$query->where(array(
    'Owner.name:LIKE' => '%a%',
    'Box.width:>=' => 10,
    'Box.height:!=' => 2,
    'Box.color:IN' => array('red','green','blue'),
));
$query->sortby('Box.name','ASC');
$query->sortby('Box.height','DESC');
$query->limit(4);
$boxes = $xpdo->getCollection('Box',$query);

Вы также можете выполнять более сложные запросы, например так:

$query = $xpdo->newQuery('Person');
$query->where(array(
    array(
        'first_name:=' => 'Bob',
        array(
            'OR:last_name:LIKE' => 'Boblablaw',
            'AND:gender:=' => 'M',
        ),
    ),
    'password:!=' => null,
));

переводит на:

(
  (      `Person`.`first_name` = 'Bob'
    OR ( `Person`.`last_name` LIKE 'Boblablaw' AND `Person`.`gender` = 'M' )
  )
  AND password IS NOT NULL
)

Обратите внимание, что если вы указываете условие в строке ключа, например 'OR:disabled:!=' => true, вам также необходимо указать операнд. Это означает, что вы должны specify = explicitly, например, в: 'AND:gender:=' => 'M'

Действительные операторы

$c = $xpdo->newQuery('Person');
$c->where(array(
  'name:=' => 'John', /* Равно */
  'name:!=' => 'Sue', /* Неравно */
  'age:>' => '21', /* Больше чем */
  'age:>=' => '21', /* Больше или равно */
  'age:<' => '18', /* Меньше, чем */
  'age:<=' => '18', /* Меньше или равно */
  'search:LIKE' => 'Term', /* LIKE statement */
  'field' => null, /* проверка на NULL */
  'ids:IN' => array(1,2,3), /* IN statement */
));

Отладка

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

$c = $xpdo->newQuery('Person');
// добавить фильтры здесь...
$c->prepare();
print $c->toSQL();

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

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

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • Fabian Christen
  • Dannevang Digital
  • Sepia River Studios
  • Chris Fickling
  • CrewMark
  • deJaya
  • Lefthandmedia
  • Murray Wood
  • eydolan
  • Following Sea
  • Anton Tarasov
  • Stéphane Jäggi
  • Raffy
  • Snow Creative
  • A. Moreno
  • Nick Clark
  • JT Skaggs
  • Helen
  • YJ
  • krisznet
  • Richard
  • Yanni

Budget

$301 per month—let's make that $500!

Learn more