web-dev-qa-db-ja.com

プログラムでノードの更新/変更されたタイムスタンプを設定する方法

一部の移行されたコンテンツでは、ノードが保存された時間の移行ではなく、元のタイムスタンプに設定された「更新された」タイムスタンプが必要です。

データベースの「変更済み」フィールドを設定しても、ノードの更新時間には影響がないように見えますか?

次にクエリの例を示します。

update node_field_data set changed = 1535805325 where nid = 2148716;
Query OK, 1 row affected (0.01 sec)
...
select nid,changed,from_unixtime(changed) from node_field_data where nid = 2148716;
+---------+------------+------------------------+
| nid     | changed    | from_unixtime(changed) |
+---------+------------+------------------------+
| 2148716 | 1535805325 | 2018-09-01 12:35:25    |
+---------+------------+------------------------+
1 row in set (0.02 sec)

ノードをロードすると、元のchangedタイムスタンプが返されます:

[changed] => Array
(
    [x-default] => 1532090833
)

キャッシュタグのクリアやキャッシュサービス(redis + varnish)の完全な再起動など、すべてのキャッシュをクリアしようとしましたが、役に立たなかったため、以前に変更されたタイムスタンプが常に返されます!

この場合の更新/変更されたタイムスタンプの設定方法に関する提案はありますか?

3
David Thomas

このアプローチでは、解決策は、別のテーブルも変更されたタイムスタンプで更新されるようにすることでした:node_field_revision

例えば:

update node_field_revision set changed = 1535805325 where nid = 2148716 and vid = 2803575;

その後、通常のキャッシュクリアにより、ノードの新しい更新されたタイムスタンプが示されました。

2
David Thomas