在我使用 CActiveRecord->findAllByAttributes()
之后,我想要的大多数时间只获得结果数据(这是返回的每一行的子数组'属性')。
我阅读了doc,我认为getAttributes()应该是我需要的东西,但它出现了这个错误的错误信息:
Call to a member function getAttributes() on a non-object
我问这个问题,因为我觉得我很想念getAttributes(), 所以请告诉我:
以下是参考资料
我的所作所为:
$data = User::model()->findAllByAttributes(array(), 'id < 16');
echo '<pre>$data ';
print_r ($data);
echo '</pre>';
将返回如下数组:
Array
(
[0] => User Object
(
[_identity:User:private] =>
[newPassword] =>
[passConfrim] =>
[userNameOrEmail] =>
[rememberMe] =>
[success] =>
[_new:CActiveRecord:private] =>
[_attributes:CActiveRecord:private] => Array
(
[id] => 5
[userName] => youShallNotPass
[email] => papapass@hoo.com
[password] => 46f94c8de14fb36680850768ff1b7f2a
[type] => 2
[lang_id] => 1
[subscription] => 0
[status] => live
[createDate] => 2014-08-04 18:22:15
[updateDate] => 2014-09-04 14:44:55
[remark] =>
)
[_related:CActiveRecord:private] => Array
(
)
[_c:CActiveRecord:private] =>
[_pk:CActiveRecord:private] => 5
[_alias:CActiveRecord:private] => t
[_errors:CModel:private] => Array
(
)
[_validators:CModel:private] =>
[_scenario:CModel:private] => update
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)
......
)
我想要的数据:
Array
[0] => Array(
[id] => 5
[userName] => youShallNotPass
[email] => papapass@hoo.com
[password] => 46f94c8de14fb36680850768ff1b7f2a
[type] => 2
[lang_id] => 1
[subscription] => 0
[status] => live
[createDate] => 2014-08-04 18:22:15
[updateDate] => 2014-09-04 14:44:55
[remark] =>
)
[1] => Array(
......
)
)
我正在使用的解决方法:
function myGetAttributes($result){
$returnArr = array();
foreach ($result as $row){
$data = $row->attributes;
array_push($returnArr, $data);
}
return $returnArr;
}
我问这个问题,因为我觉得我很想念getAttributes(), 所以请告诉我:
答案 0 :(得分:0)
好的,这可以帮到你:
$data = User::model()->findAllByAttributes(array(), 'id < 16');
$encode=CJSON::encode($data);
$decode=CJSON::decode($encode);
print_r($decode);
答案 1 :(得分:0)
试试这个
$values = array();
foreach($data as $v){
$values[] = $v->attributes;
}
print '<pre>';
print_r($values);
print '</pre>';
答案 2 :(得分:0)
find...
系列(find
,findByPk
等)返回CActiveRecord(AR)的对象,但findAll...
系列(findAll
,{{1返回一个AR对象数组,以便在findAllByAttributes
或其他循环中使用。例如:
foreach
关于你的问题:
1- foreach(User::model()->findAll('confirmed=1') as $user) {
echo CVardumper::dump($user->attributes, 10, true);
}
(或简称$model->getAttributes()
)返回一个关联数组($model->attributes
)。
2-如果没有符合条件的记录,fieldName=>value
方法(所有方法)的返回值将为空。
3-不,它始终是一个对象,因为框架的实用程序依赖于这种类型。您可以在AR或类find
中编写方法,并将以下代码放在其中:
protected/components/Tools.php
然后,像class Tools
{
public static function getAttributes($models)
{
if(!is_array($models) {
return $model->attributes;
}
$result = array();
foreach($models as $model) {
$result[] = $model->attributes;
}
}
}
一样使用它。
如果答案解决了您的问题,请告诉我。