如何在将数据返回给用户时在模型中打印某些属性
我有用户模型,其中包含用户名,密码,电子邮件
我可以为所有用户提供用户名,电子邮件
现在我需要向用户发送用户名和电子邮件
尝试从以下代码
以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中执行此操作?
答案 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));
}
如果您不需要,只需在查询中选择密码字段即可。