【发布时间】:2018-04-04 15:38:51
【问题描述】:
如何通过 db_query排除未发布的节点?
我认为它们被定义为
SELECT * FROM `node` WHERE status = '1'
但是如何将其包含在下面的 drupal db_query 中?
function faq_search_find() {
$term = strip_tags(drupal_substr($_POST['keyword'], 0, 100));
$result = db_query("SELECT question, nid
FROM {faq_questions}
WHERE question LIKE :term
ORDER BY question asc", array(':term' => '%%' . $term . '%%'));
$string = "";
while ($row = $result->fetchObject()) {
$string .= "<a href='/" . drupal_get_path_alias('node/' . $row->nid) . "'>" . $row->question . "</a>";
}
echo $string;
exit;
}
searh 是否可以根据节点表中的 nid 进行组合,或者更好的方法是在 while 循环中使用 Drupal 命令将它们过滤掉?
感谢您的帮助。
【问题讨论】:
-
您最好使用
EntityFieldQuery。 drupal.org/docs/7/creating-custom-modules/howtos/… -
是,用 EFQ 替换整个查询。
-
首先是可读性。这使得它在未来更好地维护。而且您无论如何都处于实体级别,所以为什么不使用为此而设计的功能。
-
使用 EntityFieldQuery 或将节点表加入到您的查询中
-
SELECT f.question, f.nid FROM {faq_questions} f INNER JOIN {node} n ON f.nid = n.nid WHERE f.question LIKE :term ORDER BY f.question asc