Drupal 7 ИЛИ условие с рядом И условие - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть запрос на Drupal, как показано ниже

$qry = db_select('table1', 't1');
$qry->addField('t1','etid','entity_id');
$qry->join('node', 'n FORCE INDEX(field1)', 'n.nid = t1.etid');
$qry->join('table2','t2','n.nid = t2.entity_id');
$qry->join('table3','t3','t3.sid=t2.field2');
$qry->condition('t3.field', 'yes', '=');
$qry->condition('n.field', '<value>', 'LIKE');
$qry->condition('t1.field', '<id>', '=');
$qry->condition('n.field', '<value>', '=');
$qry->condition('n.field', <value>, '=');
$qry->condition('t1.field', '<vlaue>', '=');
$qry->orderBy('t1.field','DESC');
$qry->range(0,300);

Я бы хотел добавить условие OR к этому запросу. Таким образом, это будет глобальное OR условие.

Я добавил код как показано ниже

$or = db_or();
$or->condition('t1.field', [123,456], 'IN');
$qry->condition($or);

Но это не добавило условие OR, но поместило запрос условия в фигурные скобки в условие AND.

Как мне получить выходной запрос наподобие

where field = value and field = value and field = value OR field = value

с помощью построителя запросов Drupal ? Пожалуйста, помогите

1 Ответ

0 голосов
/ 07 сентября 2018

использовать db_and

$db_and = db_and();


$qry = db_select('table1', 't1');
$qry->addField('t1','etid','entity_id');
$qry->join('node', 'n FORCE INDEX(field1)', 'n.nid = t1.etid');
$qry->join('table2','t2','n.nid = t2.entity_id');
$qry->join('table3','t3','t3.sid=t2.field2');

$db_and->condition('t3.field', 'yes', '=');
$db_and->condition('n.field', '<value>', 'LIKE');
$db_and->condition('t1.field', '<id>', '=');
$db_and->condition('n.field', '<value>', '=');
$db_and->condition('n.field', <value>, '=');
$db_and->condition('t1.field', '<vlaue>', '=');

$or = db_or();
$or->condition('t1.field', [123,456], 'IN');
$or->condition($db_and);

$qry->condition($or);

$qry->orderBy('t1.field','DESC');
$qry->range(0,300);
...