Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal 在hook\u query\u TAG\u alter中的db\u或()?_Drupal_Drupal 7_Drupal Views - Fatal编程技术网

Drupal 在hook\u query\u TAG\u alter中的db\u或()?

Drupal 在hook\u query\u TAG\u alter中的db\u或()?,drupal,drupal-7,drupal-views,Drupal,Drupal 7,Drupal Views,我对Drupal 7不熟悉,但对Drupal不熟悉。然而,我担心新的数据库查询系统有点让我不知所措 我正在尝试使用hook\u query\u TAG\u alter()更改视图查询。本质上,我试图在过滤器中附加OR,即“列出当前用户在特定_字段中被引用或是作者的节点” 我试图通过向查询中添加db\u或()->条件(…)来附加最后一个条件(或作者),但我一直收到一个致命错误: 在/Volumes/…中调用未定义的方法SelectQuery::db_或() 这简直让我发疯,因为我对这个系统还不够了

我对Drupal 7不熟悉,但对Drupal不熟悉。然而,我担心新的数据库查询系统有点让我不知所措

我正在尝试使用
hook\u query\u TAG\u alter()
更改视图查询。本质上,我试图在过滤器中附加OR,即“列出当前用户在特定_字段中被引用或是作者的节点”

我试图通过向查询中添加
db\u或()->条件(…)
来附加最后一个条件(或作者),但我一直收到一个致命错误:

在/Volumes/…中调用未定义的方法SelectQuery::db_或()

这简直让我发疯,因为我对这个系统还不够了解,不知道为什么这个方法不可用。以下是我的实现:

function sentinel_network_query_views_networks_alter(QueryAlterableInterface $query) {
  $query->db_or()->condition('node.uid', '***CURRENT_USER***', '=');
}
db\u或()
返回数据库条件实例,因此需要将其作为条件传递给查询。此外,在
db\u or()
中需要多个条件才能实际执行or

$or = db_or()
  ->condition('node.uid', '***CURRENT_USER***', '=')
  ->condition('node.nid', 'SECOND CONDITION');
$query->condition($or);
希望对您有所帮助

是一种功能,而不是一种方法

作为如何使用
db\u或()

$query->condition()
不替换现有条件;它增加了一个新的条件。 在中,
选择查询::$where
(其中包含查询的
数据库条件
对象)使用以下代码初始化:

 $this->where = new DatabaseCondition('AND');

这意味着添加到
SelectQuery
对象中的所有条件都将使用“AND”运算符相互连接。

这实际上是在现有条件中添加或,还是替换当前条件?它看起来会执行后一种操作。
$query->condition()
添加一个新条件;它不会取代现有的。所以我的理解是,我不能只是在当前条件中添加OR,但我可以将该条件保留在视图本身之外,并以这种方式添加原始条件或我的新条件?查询可能附加了多个条件,因此您必须循环查看这些条件,以确定是否可以识别要更改的条件,然后将其替换为或。
 $this->where = new DatabaseCondition('AND');