Я не уверен в правильной логике для использования в следующей ситуации. Такая ситуация возникает в моем приложении несколько раз, и я предполагаю, что это могут испытать и другие.
В Yii у меня есть функция loadModel, которая возвращает CActiveRecord.
Функция выглядит следующим образом:
$model=Product::model()->with('performance','subcategory','sponsor')->findByPk($id);
Как видите, я с нетерпением жду трех отношений. Одно из таких отношений - производительность -
является отношением HAS_MANY и относится к отзывам пользователей продукта.
Таким образом, для продукта x может быть 100 отзывов с разными датами и оценками.
Я пытаюсь сделать следующее:
- Извлечь все данные о производительности (поэтому все 100 отзывов)
- Извлечь самую последнюю оценку производительности (если она была отправлена в течение последних 120 дней)
Путаница в логике заключается в следующем.
Должен ли я создать функцию в моем классе моделей, которая проходит через $model->performance
, чтобы получить самую свежую информацию (# 2).
Должен ли я создать совершенно отдельное отношение только для этого уточненного фрагмента данных.
Эти самые последние данные обзора будут необходимы для каждого продукта в CListView, и ListView должен сортироваться по этим данным. Таким образом, создается впечатление, что его необходимо напрямую прикрепить к активной записи продукта, которая передается в представление.
Как мне с этим справиться и с точки зрения производительности, и с точки зрения логики?
Кроме того, вот текущий код, который я пытался использовать, который не работает:
public function scopes()
{
return array(
'recentPerf'=>array(
'condition'=>'perf_date > ' . strtotime('-120 days', strtotime(new CDbExpression('NOW()'))),
'order'=>'perf_date DESC',
'limit'=>1,
)
);
}
Заранее спасибо за любые предложения!
Ответ Удея заставил прицел работать - как теперь правильно использовать прицел?
Должен ли я передать эту сумму с текущей моделью?
т.е. могу ли я прикрепить это к:
$model=Product::model()->with('performance','subcategory','sponsor')->findByPk($id);
?
Как я проверил это, чтобы убедиться, что он работал:
$maxPerformance = ProdPerformance::model()->recentPerf()->find();
и затем передаю эту переменную в представление. Это выглядит как «нечистый» способ справиться с этой ситуацией. Должно ли оно вместо этого передаваться с исходной переменной $model
?