跟踪对drupal实体的更改

时间:2012-01-01 20:08:25

标签: mysql drupal drupal-7 drupal-modules

我有一个类似于以下的表

$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 docs中的共享电子表格)。我想要做的是优化它,每次只提供更改的记录。我最初的想法是给每个元素一个时间戳属性,让客户端跟踪它看到的最高时间戳,然后用更新的时间戳请求所有内容。然后我在Drupal api文档中看到hook_schema,看起来所有节点的魔法属性都被称为已更改。我可以为我的实体获得类似的魔法属性吗,这对我的场景有帮助吗,或者我最好只是按照自己的逻辑来做这件事。性能非常关键,因为这可能是关键的瓶颈。

1 个答案:

答案 0 :(得分: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,
),
[...]

这里没有什么神奇之处,你应该按计划继续使用自己的逻辑:)