2012-01-01 79 views
1

我具有類似於下面跟蹤更改到一個Drupal實體

$schema['mytable'] = array(
    'fields' => array(
     'id' => array(
      'type'=>'int', 
      'not null' => TRUE 
     ), 
     'content' => array(
      'type' => 'varchar', 
      'length' => 400 
     ) 
    ), 
    'primary key' => array('id') 
); 
在hook_schema定義

的表。我有一個JavaScript客戶端應用程序,它重複將此表的內容提取到客戶端,以便在表格被修改時立即更新(例如,Google文檔中的共享電子表格)。我想要做的就是優化它,以便每次只提供更改的記錄。我最初的想法是給每個元素一個timestamp屬性,讓客戶端跟蹤它看到的最高時間戳,然後用新的時間戳請求所有的東西。然後我在Drupal的API文檔hook_schema上看到,似乎有一個被稱爲改變的所有節點的魔法屬性。我是否可以爲我的實體獲得類似的魔法屬性,並且這對我的場景有所幫助,或者我會更好地轉換自己的邏輯來執行此操作。性能相當關鍵,因爲這可能是關鍵的瓶頸。

回答

1

我想你錯了「魔法財產」'改變',因爲它沒有什麼魔力。這只是節點表中的一個普通的int字段,它使用UNIX時間戳填充,非常像您爲用例提出的那個。

的誤解可能是從只顯示節點表定義的一部分hook_schema API文檔莖,如代碼內聯指出:

function hook_schema() { 
    $schema['node'] = array(
    // example (partial) specification for table "node" 
[...] 

如果你看一下全面落實node_schema(),你會找到以下定義爲「改變」字段:

[...] 
'changed' => array(
    'description' => 'The Unix timestamp when the node was most recently saved.', 
    'type' => 'int', 
    'not null' => TRUE, 
    'default' => 0, 
), 
[...] 

所以沒有魔法在這裏,你或許應該只是用自己的邏輯如期舉行:)

+0

謝謝,我錯過了關於規範只是部分的評論。 – ForbesLindesay 2012-01-03 22:49:25