mysql - 跟踪对 drupal 实体的更改

标签 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 客户端应用程序,它反复将此表的内容拉到客户端,以便在表被修改时立即更新(就像谷歌文档中的共享电子表格)。我想做的是优化它每次只提供更改的记录。我最初的想法是给每个元素一个时间戳属性,让客户端跟踪它看到的最高时间戳,然后用更新的时间戳请求所有内容。然后我在 Drupal api 文档中看到了 hook_schema所有节点似乎都有一个名为已更改的神奇属性。我可以为我的实体获得类似的魔法属性吗,这对我的场景有帮助吗,或者我最好只是滚动我自己的逻辑来做到这一点。性能相当关键,因为这可能是关键瓶颈。

最佳答案

我认为您对“已更改”的“神奇属性”有误解,因为它没有任何神奇之处。它只是节点表中的一个普通 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,
),
[...]

所以这里没有魔法,您可能应该按照计划继续您自己的逻辑:)

关于mysql - 跟踪对 drupal 实体的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695212/

相关文章:

MySQL进入输出文件错误

Drupal View 行输出

facebook - 如何将我的 Facebook 评论发布到我的 Drupal 网站?

mysql - SQL 内连接不返回正确的答案

drupal-7 - 如何在 Drupal 7 中通过电子邮件地址加载用户对象?

javascript - 多功能Drupal s.prop显示以前的轨迹数据

Drupal:在 user_save 中分配角色

来自数据库的数量卷的 Javascript 条形图未显示在 php 网页中

php - 如何使用mysql从多个表中检索数据

Php MysQl 搜索脚本返回空白页