Связь STAT в родственной модели в Yii - PullRequest
0 голосов
/ 01 февраля 2012

Я не уверен в правильной логике для использования в следующей ситуации. Такая ситуация возникает в моем приложении несколько раз, и я предполагаю, что это могут испытать и другие.

В Yii у меня есть функция loadModel, которая возвращает CActiveRecord.

Функция выглядит следующим образом:

$model=Product::model()->with('performance','subcategory','sponsor')->findByPk($id);

Как видите, я с нетерпением жду трех отношений. Одно из таких отношений - производительность - является отношением HAS_MANY и относится к отзывам пользователей продукта.

Таким образом, для продукта x может быть 100 отзывов с разными датами и оценками.

Я пытаюсь сделать следующее:

  1. Извлечь все данные о производительности (поэтому все 100 отзывов)
  2. Извлечь самую последнюю оценку производительности (если она была отправлена ​​в течение последних 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?

1 Ответ

0 голосов
/ 01 февраля 2012

Я не уверен, но, возможно, следующая строка имеет подвох

'condition'=>'perf_date > ' . strtotime('-120 days', strtotime(new CDbExpression('NOW()'))),

условие - это данные, которые будут отправлены в MySQL, поэтому строка даты должна быть в формате MySQL, а не в PHP, попробуйте это

'condition'=>'perf_date > CURRENT_DATE - INTERVAL 120 DAYS',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...