Drupal 在hook\u query\u TAG\u alter中的db\u或()?
我对Drupal 7不熟悉,但对Drupal不熟悉。然而,我担心新的数据库查询系统有点让我不知所措 我正在尝试使用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_或() 这简直让我发疯,因为我对这个系统还不够了
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');