ブロック用のカスタムキャッシュ消去モジュールを書いています。
現時点では、1人のユーザーとその複数の言語のキャッシュを削除できます。
$uid = 7094;
$module = 'custom_home_panes';
$block = 'custom_home_panes_news_group';
$theme = 'framework';
$table = 'cache_block';
$cid_start = $module . ':' . $block . ':' . $theme . ':';
// Wildcard in middle for language code
$cid_end = ':u.' . $uid;
$delete = db_delete('cache_block')
->condition('cid', db_like($cid_start) . '%%' . db_like($cid_end), 'LIKE')
->execute();
しかし、私はUIDの配列に対してこれを行う必要があり、以下のスニペットのようにINを使用する必要があると思います。
->condition('uid', array(1,5,7),'IN')
私は自分がしたことを配列に追加できると思ったので、ここまでたどり着いたのです。
foreach ($uids as $uid) {
$queries[] = db_like($module . ':' . $block . ':' . $theme . ':') . '%%' . db_like(':u.' . $uid), 'LIKE';
}
最終結果は、以下のようなレコードを削除するクエリになります。
custom_home_panes:custom_home_panes_news_group:framework:vi:u.7250
custom_home_panes:custom_home_panes_news_group:framework:en:u.7250
custom_home_panes:custom_home_panes_news_group:framework:vi:u.7253
custom_home_panes:custom_home_panes_news_group:framework:en:u.7253
SQLのスキルはひどいです。ありがとう!
LIKEとINを組み合わせて使用することはできません。
UIDごとに異なるクエリを実行する必要があります。
例えば。
$cid_base_pattern = db_like($module) . ':' . db_like($block) . ':' . db_like($theme) . ':%:u.';
foreach ($uids as $uid) {
db_delete('cache_block')
->condition('cid', $cid_base_pattern . $uid, 'LIKE')
->execute();
}