我有一个类似下面的表格
$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/