xPDOQuery
Последнее обновление Jan 27th, 2020 | История страницы | Улучшить эту страницу | Сообщить о проблеме
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
$311 per month—let's make that $500!
Learn moreXPDOQuery
расширяет класс xPDOCriteria
и позволяет вам абстрагировать сложные запросы SQL в формат ООП. Это позволяет инкапсулировать вызовы SQL, чтобы они могли работать с несколькими типами баз данных, а также легко читаться и динамически создаваться.
- xPDOQuery.andCondition
- xPDOQuery.groupby
- xPDOQuery.innerJoin
- xPDOQuery.leftJoin
- xPDOQuery.limit
- xPDOQuery.orCondition
- xPDOQuery.rightJoin
- xPDOQuery.select
- xPDOQuery.setClassAlias
- xPDOQuery.sortby
- xPDOQuery.where
Примеры¶
Возьмите первые 4 коробки с:
- Владельцы, которые имеют букву «а» в своих именах
- Ширина не менее 10
- Высота не 2
- Цвет red, blue или green
- Отсортировано по имени ящика по возрастанию, а затем по высоте ящика по убыванию
$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
Budget
$311 per month—let's make that $500!
Learn more