Drupal 7 OR条件具有一系列AND条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Drupal 7 OR条件具有一系列AND条件相关的知识,希望对你有一定的参考价值。

我有一个像下面的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查询生成器?请帮忙

答案

使用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);

以上是关于Drupal 7 OR条件具有一系列AND条件的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义 php 代码的 drupal 条件操作

当我将Drupal 7更新为Drupal 8时,我的模块会发生什么?

Drupal 视图条件链接

php Drupal中的条件表单字段

markdown Drupal有条件地显示/隐藏字段。

尝试根据日期条件隐藏 Drupal 视图输出中的 CC 字段