如何使用yii中的Active记录打印某些属性?

时间:2014-01-03 14:02:19

标签: php yii

如何在将数据返回给用户时在模型中打印某些属性

我有用户模型,其中包含用户名,密码,电子邮件

我可以为所有用户提供用户名,电子邮件

现在我需要向用户发送用户名和电子邮件

尝试从以下代码

以json的形式向用户发送数据时
      $models = Users::model()->findAll($criteria);

    if(is_null($models)) {
        $this->_sendResponse(200, sprintf('No users found'));
    } else {
        $rows = array();

        foreach($models as $model)
        {
            $Users[] = $model->attributes;

        }

        $SandboxObj->_sendResponse(200, CJSON::encode($Users));
    }

它显示为[{"Username":"foo","Email":"foo@foo.com","Password":"null"}]

我需要发送[{"Username":"foo","Email":"foo@foo.com"}]

如何在yii中执行此操作?

2 个答案:

答案 0 :(得分:2)

我知道这个问题已经得到了回答和接受,但我不喜欢教人们懒惰的编码方式。在那里,作为对Alireza Fallah答案的修正:

$models = Users::model()->findAll($criteria);

if(is_null($models)) {
    $this->_sendResponse(200, sprintf('No users found'));
} else {
    $userData = array();

    foreach($models as $model)
    {
        $tempData = new StdClass;
        $tempData->Username = $model->Username;
        $tempData->Email= $model->Email;
        $userData[] = $tempData;
    }

    $SandboxObj->_sendResponse(200, CJSON::encode($userData));
}

或者之前所说的只是首先查询你需要的东西,然后你可以在你的其余代码中懒得所有。

修改:使用更少资源执行foreach的另一种方法是:

    foreach($models as &$model)
    {
        $tempData = new StdClass;
        $tempData->Username = $model->Username;
        $tempData->Email= $model->Email;
        $model = $tempData;
    }

然后您可以使用$ models代替$ userData

答案 1 :(得分:1)

这样做:

  $models = Users::model()->findAll($criteria);

if(is_null($models)) {
    $this->_sendResponse(200, sprintf('No users found'));
} else {
    $rows = array();

    foreach($models as $model)
    {
        unset($model->attributes['Password']); //add this line
        $Users[] = $model->attributes;

    }

    $SandboxObj->_sendResponse(200, CJSON::encode($Users));
}

如果您不需要,只需在查询中选择密码字段即可。