2013-05-02 57 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