【问题标题】:How to pass $node->nid into update statement如何将 $node->nid 传递到更新语句中
【发布时间】:2012-12-28 21:32:52
【问题描述】:

我正在尝试使用以下代码更新 Drupal 7 中的节点。

db_update('table')
  ->fields(array('column1' => 1))
  ->condition('entity_id', 2, '=')
  ->execute();

语句按预期工作:column1 的值更新为 1,其中 entity_id = 2。

但是,我正在尝试将 2 替换为当前节点。

如果我使用return $node->nid;,那么当前节点会按预期返回。如果我尝试将 $node->nid 放入查询中,它不会验证。

以下代码不返回任何内容;查询失败。

db_update('table')
  ->fields(array('column1' => 1))
  ->condition('entity_id', $node->nid, '=')
  ->execute();

【问题讨论】:

  • 您的代码对我来说看起来不错。你会粘贴错误信息吗?
  • 您可以显示您正在使用的完整代码吗?您使用的是哪个钩子,如果您收到任何错误代码,您会得到哪个错误代码?

标签: sql drupal-7


【解决方案1】:

这里的黑暗中总刺:

试试

global $node;

在上述行之前。

或者只是将一个变量分配给 Return %node->nid

并将变量放在你有 $node->nid 的地方?

【讨论】:

  • Drupal 没有任何全局$node
  • @kiamlaluno global $node 本身不做任何事情......但它应该使 $node 对象在上述函数的范围内可见,并在后续行中使用单个箭头运算符。无论如何都是在黑暗中拍摄。
  • 如果我在 Drupal 函数中添加 global $node;,访问 $node->nid 时会出错,因为 $node 不是对象(Drupal 不会初始化 $node)。如果函数已经将$node 作为参数,PHP 可能会返回一个关于用全局变量覆盖局部变量的错误。 OP 应该说明它在哪里使用该代码,因为上下文非常重要,并且到目前为止问题中缺少该信息。
  • @kiamlaluno 明白了!自从我使用 Drupal 以来已经有一段时间了……希望有一个简单的单线……我的 D7 发生了变化:)
  • 等着看 Drupal 8,你会想知道那是否仍然是 Drupal 代码。 ;)
猜你喜欢
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2016-08-24
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多