2013-05-02 26 views
0

我运行下面的查询返回stcClass的阵列如下对象:在Drupal模块中查询SQL - 什么是节点?

$result = db_query('SELECT node.title AS node_title, 
        node.nid AS nid, 
        node.created AS node_created, 
        \'node\' AS field_data_my_field_node_entity_type 
        FROM {node} node WHERE (((node.status = :status) 
        AND (node.type IN (:type)))) 
        ORDER BY node_created DESC', 
        array(':status'=>'1', ':type'=>'_my_content_type')); 


stdClass Object 
(
[node_title] => my sample title 
[nid] => 331 
[node_created] => 1367500781 
[field_data_my_field_node_entity_type] => node 
) 

它返回stdClass的对象的数组。我的问题是,在字段'field_data_my_field_node_entity_type'我只有字符串'节点',因为这是作为字符串传递到查询。我对这件事并不十分了解,但如果我拥有正确的语法,我想我可以在那里获得价值。

任何想法这个查询应该如何工作?

在此先感谢

+0

你有什么问题? field_data_my_field_node_entity_type ='node',因为这是查询所做的... – Nagasaki 2013-05-02 14:41:11

+0

但为什么节点只是一个字符串?我无法获得该字段的值吗?我从视图中查询并试图理解它。谢谢 – rix 2013-05-02 14:46:11

+0

如果你想另一个值,你必须改变\'node \'像其他的东西像node.the_field_you_want – Nagasaki 2013-05-02 14:51:46

回答

2

您获得的价值,因为你用'node' AS field_data_my_field_node_entity_type设置它在SQL查询。

如果你的问题是如何得到一个节点的实体类型,那总是节点; “节点”表中没有包含该值的字段。

如果您向一个或多个内容类型添加了“field_data_my_field_node_entity_type”字段,并且想要获取该字段的内容,则需要执行以下步骤,因为节点字段的内容未包含在“节点“表。

  • 获取节点
  • 负荷节点的节点ID node_load()
$result = db_query('SELECT nid FROM {node} WHERE ((status = :status) AND (type IN (:type)) ORDER BY created DESC', array(':status'=>'1', ':type'=>'_my_content_type'))->fetchAll(PDO::FETCH_ASSOC); 

foreach ($result as $row) { 
    $node = node_load($row['nid']); 
    // Access the field as $node->field_data_my_field_node_entity_type. 
} 
+0

这是不是意味着我必须做更多的查询?是否无法从查询中获取该值? – rix 2013-05-03 13:45:48

+0

获取节点字段的值时会涉及许多钩子(一个是使用字段API创建的),并且当您简单地查询数据库时,这些钩子将不会被调用。除此之外,我所展示的代码在任何情况下都适用,并适用于每个Drupal版本。查询数量不会增加太多。 – kiamlaluno 2013-05-03 13:52:01