Yii:CActiveRecord :: getAttributes()导致错误“在非对象上调用成员函数getAttributes()”

时间:2014-09-05 01:58:52

标签: php yii

在我使用 CActiveRecord->findAllByAttributes() 之后,我想要的大多数时间只获得结果数据(这是返回的每一行的子数组'属性')。

我阅读了doc,我认为getAttributes()应该是我需要的东西,但它出现了这个错误的错误信息: Call to a member function getAttributes() on a non-object


我问这个问题,因为我觉得我很想念getAttributes(), 所以请告诉我:

  1. getAttributes()究竟是什么工作的?
  2. 为什么要返回值 findAllByAttributes()是非对象?
  3. 任何其他正式方式获得 返回值里面的“属性”子数组 findAllByAttributes()?

  4. 以下是参考资料


    我的所作所为:

    $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(), 所以请告诉我:

    1. getAttributes()究竟是什么工作的?
    2. 为什么要返回值 findAllByAttributes()是非对象?
    3. 任何其他正式方式获得 返回值里面的“属性”子数组 findAllByAttributes()?

3 个答案:

答案 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...系列(findfindByPk等)返回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; } } } 一样使用它。

如果答案解决了您的问题,请告诉我。