基于模型中检查参数的标准

时间:2014-08-27 06:35:28

标签: php yii

无法找到解决这个小问题。所以我有桌子

 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,
    ));

1 个答案:

答案 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,
)),