我有一个类似于以下的表
$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,看起来所有节点的魔法属性都被称为已更改。我可以为我的实体获得类似的魔法属性吗,这对我的场景有帮助吗,或者我最好只是按照自己的逻辑来做这件事。性能非常关键,因为这可能是关键的瓶颈。
答案 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,
),
[...]
这里没有什么神奇之处,你应该按计划继续使用自己的逻辑:)