Jump to main content Jump to doc navigation

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

  1. xPDOQuery.andCondition
  2. xPDOQuery.command
  3. xPDOQuery.condition
  4. xPDOQuery.distinct
  5. xPDOQuery.from
  6. xPDOQuery.groupby
  7. xPDOQuery.having
  8. xPDOQuery.innerJoin
  9. xPDOQuery.isConditionalClause
  10. xPDOQuery.isValidClause
  11. xPDOQuery.join
  12. xPDOQuery.leftJoin
  13. xPDOQuery.limit
  14. xPDOQuery.orCondition
  15. xPDOQuery.prepare
  16. xPDOQuery.rightJoin
  17. xPDOQuery.select
  18. xPDOQuery.set
  19. xPDOQuery.setClassAlias
  20. xPDOQuery.sortby
  21. 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
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • A. Moreno
  • Alex
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

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

Learn more