xPDOQuery.where
Последнее обновление Jan 28th, 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
$306 per month—let's make that $500!
Learn morexPDOQuery::where¶
Добавьте условие WHERE
в запрос. Как правило, это работает, когда вы добавляете оператор к атрибуту после двоеточия.
array('attribute:operator' => 'value')
Operator | Symbol | Example |
---|---|---|
Equals | none | $query->where(array('width' => 15)); |
Not Equals | != | $query->where(array('width:!=' => 15)); |
Greater Than | > | $query->where(array('width:>' => 15)); |
Less Than | < | $query->where(array('width:<' => 15)); |
Greater Than or Equal to | >= | $query->where(array('width:>=' => 15)); |
Less Than or Equal to | <= | $query->where(array('width:<=' => 15)); |
Like | LIKE | $query->where(array('width:LIKE' => '%15%')); |
Not Like | NOT LIKE | $query->where(array('width:NOT LIKE' => '%15%')); |
Exists in | IN | $query->where(array('width:IN' => array(15,16,17,20))); |
Not Exists in | NOT IN | $query->where(array('width:NOT IN' => array(15,16,17,20))); |
Is Null | IS | $query->where(array('width:IS' => null)); |
Синтаксис¶
API Docs: xPDOQuery::where()
xPDOQuery where ([mixed $conditions = ''],
[string $conjunction = xPDOQuery::SQL_AND],
[mixed $binding = null],
[integer $condGroup = 0])
Примеры¶
Получить все коробки шириной 15.
$query = $xpdo->newQuery('Box');
$query->where(array(
'width' => 15,
));
$boxes = $xpdo->getCollection('Box',$query);
Получите все коробки шириной 15 или 10.
$query = $xpdo->newQuery('Box');
$query->where(array('width' => 15));
$query->where(array('width' => 10),xPDOQuery::SQL_OR); // Вы можете использовать orCondition здесь также
$boxes = $xpdo->getCollection('Box',$query);
Альтернативный способ получить коробки шириной 15 или 10.
$query = $xpdo->newQuery('Box');
$query->where(array(
array( // два массива, используемые для хранения оператора OR в перечисленных условиях
'width' => 15
),
array(
'width' => 10
)
),xPDOQuery::SQL_OR); // используйте один массив, если нет дополнительных, где используются операторы.
$boxes = $xpdo->getCollection('Box',$query);
Следующий альтернативный способ - получить коробки шириной 15 или 10.
$query = $xpdo->newQuery('Box');
$query->where(array(
array(
'width' => 15
),
array(
'OR:width:=' => 10
)
));
$boxes = $xpdo->getCollection('Box',$query);
Возьмите все коробки шириной больше или равной 15, но не шириной 23.
$query = $xpdo->newQuery('Box');
$query->where(array(
'width:>=' => 15,
'width:!=' => 23,
));
$boxes = $xpdo->getCollection('Box',$query);
Получите все коробки с именем с буквой 'q':
$query = $xpdo->newQuery('Box');
$query->where(array(
'name:LIKE' => '%q%',
));
$boxes = $xpdo->getCollection('Box',$query);
Используйте и &
или в одном запросе, чтобы получить все поля шириной 15 или 10 и высотой от 10 до 15.
$query = $xpdo->newQuery('Box');
$query->where(array(
array(
'width:=' => 15, // обратите внимание, что добавляя 'AND:' или 'OR:' перед атрибутом, необходимо использовать операторd ':='
'OR:width:=' => 10
),
array(
'AND:height:>=' => 10,
'AND:height:<=' => 15
)
));
$boxes = $xpdo->getCollection('Box',$query);
Более сложные примеры¶
Если у вас более сложная модель с множеством соединенных таблиц, метод where
должен ссылаться только на class alias (не имя класса), который содержит атрибут. Ниже приведен пример запроса, переданного методом getCollectionGraph, где вы можете видеть, что объект myTable присоединен к информации профиля пользователя.
$query = $modx->newQuery('myTable');
$query->where(array('Profile.fullname:LIKE' => '%Company%'));
$records = $this->ParentCMS->getCollectionGraph('myTable', '{"modUser": {"Profile":{} } }',$query);
Другой метод заключается в немедленной передаче массива $criteria
в качестве второго аргумента в newQuery
. Обратите внимание, как используется псевдоним Resource
, поскольку именно он указан в качестве псевдонима в определении схемы для объекта modTemplateVarResource
:
$criteria = array();
$criteria['modTemplateVarResource.tmplvarid'] = 9;
$criteria['modTemplateVarResource.value:IN'] = array('Red','Green','Blue');
$criteria['Resource.template'] = 2;
$criteria = $modx->newQuery('modTemplateVarResource', $criteria);
$tvrs = $modx->getCollectionGraph('modTemplateVarResource','{"Resource":{}}', $criteria);
Вот несколько примеров выполнения подзапросов:
http://forums.modx.com/index.php?topic=60287.0 https://github.com/netProphET/revolution/commit/464b8ff3d05f7114412ef19c3ec4729fa78ffeba
Смотрите также¶
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