我的控制器中有以下内容:
public function actionIndex() {
$userID = Yii::app()->user->getId();
$arNotifs = Notification::model()->getNotificationsByUserId($userID);
$this->render('index', array("arNotifications"=>$arNotifs, "userID"=>$userID));
}
我在模型中名为notification.php的文件中有以下内容:
class Notification extends CActiveRecord {
// ------ BUNCH OF STUFF
public function getNotificationsByUserId($userId) {
$userId = (int) $userId;
$query = Yii::app()->db->createCommand();
$query->select('n.id, n.title, n.content, n.updated');
$query->from('hr4_notification_x_user nxu');
$query->join('hr4_notification n', 'nxu.notification = n.id');
$query->where('nxu.user=:userId', array(':userId' => $userId);
return $query->queryAll();
}
// ------ MORE STUFF
}
当我退出行
时$arNotifs = Notification::model()->getNotificationsByUserId($userID);
并用静态值替换它可以正常工作。似乎在我的noob方式中,我错过了一些重要的步骤。控制器似乎不知道通知是什么。
提前致谢
答案 0 :(得分:0)
我相信在控制器上收到通知的最优雅方式是:
$arNotifs = Yii::app()->user->model->notifications;
要实现此目的,您可能需要在扩展CWebUser的类上实现getModel()方法。该方法将返回扩展CActiveRecord的用户的实例。然后您的用户模型可以有一个relations()方法,如下所示:
class UserModel extends CActiveRecord {
public function relations() {
return array(
'notifications' => array(self::HAS_MANY, 'Notification', 'user'),
);
}
}
这将阻止您编写该查询并使事情更清晰(在模型和控制器上)。如果愿意,请阅读relations。
答案 1 :(得分:-1)
您不能像这样使用通知模型。
您可以使用$notification = new Notification();
对其进行实例化
然后执行$notification->getNotificationsByUserId($userID);
然而,这不是很好。我会将通知代码从模型移动到User模型。
这是你甚至不需要传递用户ID。
或者甚至更好,如果您使用Notification
制作组件并将其用作服务。