无法找到解决这个小问题。所以我有桌子
project
id | title | users
1 | Main | 1,3,8
activity
id | pid | title
1 | 1 | Add new project
mi活动模型中的
public function getShow(){
$users = $this->project->users;
$userlist = explode(',', $users);
if (in_array(Yii::app()->user->id, $userlist)) {
return true;
}
else {return false;}
}
在SiteController中我想创建CDbCriteria对象以显示经过身份验证的用户的活动时间轴。但我不知道如何检查"显示"是真还是假。现在我的siteController的动作索引是
$criteria = new CDbCriteria;
$criteria->order = 'id DESC';
$criteria->condition = 'here must check if show is true';
$activity=new CActiveDataProvider('Activity',
array( 'criteria'=>$criteria
)
);
$this->render('index',array(
'activitys'=>$activity,
));
答案 0 :(得分:1)
Criteria将直接应用于数据库,你不能在其中使用php函数。 你不应该像这样将用户保存在表中,你应该建立一个链接表
project_user
project_id | user_id
1 | 1
1 | 3
1 | 8
正确生成表格和设置关系的模型。 然后你可以使用
$criteria->with = array('project', 'project_user');
$criteria->condition = 'project_user.user_id = :user_id';
$criteria->params = array('user_id' => $user_id);
我认为建立你的关系会更好,所以你可以直接 访问用户的活动。将其添加到用户模型中的关系:
'projects' => array(self::MANY_MANY, 'Project', 'project_user(user_id, project_id)'),
'activities' => array(self::HAS_MANY 'Activity', 'pid', 'through'=>'projects', 'order'=>'activity.id DESC'),
然后在你的控制器中你可以这样做:
$user = User::model()->findByPk($user_id);
$activity = new CActiveDataProvider('Activity', array(
'data'=>$user->activities,
)),