Доброго времени суток! В проекте некоторые действия контроллеров содержат очень много выборок из бд, например
/** @var Question|null $question */
$question = Question::findOne([
'url' => $slug,
'deleted' => 0,
'moderated' => 0
]);
$id = $question->id;
/** @var Question $question Вопрос */
$question = Question::find()
->with('screenshot')
->select([
Question::tableName() . '.*',
'SUM(views) as totalViews'
])
->joinWith('postView')
->with(['category', 'subcat'])
->where([Question::tableName() . '.slug' => $slug])
->one();
/** @var array $lastQuestions */
$lastQuestions = Question::find()
->where([
'moderated' => 0,
'deleted' => 0
])
->andWhere('id != ' . $question->id)
->orderBy('published_date DESC')
->limit(4)
->all();
/** @var array $similarQuestions */
$similarQuestions = Question::find()
->where([
'moderated' => 0,
'deleted' => 0
])
->andWhere(['not in', 'id', ArrayHelper::getColumn($lastQuestions, 'id')])
->andWhere('id != ' . $question->id)
->limit(6)
->all();
$countComment = QuestionComment::find()
->where([
'id' => $id,
'deleted' => 0,
])
->count();
В документации же советуют облегчать контроллеров. Скажите, как можно оптимизировать такой код контроллеров и вообще какой материал можете посоветовать по лучшим практикам разработки на Yii? Заранее спасибо!