Запрос или полученные данные, что бы не делать запрос постоянно?
Все есть тут:
www.yiiframework.com/doc-2.0/guide-caching-data.html
Как вариант:
$data = $cache->get($key);
if ($data === false) {
$query = Material::find()
->where(['in', 'id_material', $ids])
->andWhere('start_publish < :time')
->params([':time' => time()])
->orderBy(['start_publish' => SORT_DESC])
->all();
$cache->set($key, $data);
}
print_r($data);
Если надо сделать зависимость от count, то по той же ссылке есть тема Cache Dependencies
Так же можно закешировать запрос:
$data= Material::getDb()->cache(function ($db) {
return Material::find()->where(['in', 'id_material', $ids])
->andWhere('start_publish < :time')
->params([':time' => time()])
->orderBy(['start_publish' => SORT_DESC])->all();
});