【问题标题】:yii : Trying to get property of non-objectyii : 试图获取非对象的属性
【发布时间】:2013-11-20 08:09:43
【问题描述】:

好吧,我找到了this,但我看不出与我的错误的关系。我是新手——我知道这个借口是不可接受的,但我先尝试找到解决方案,然后再在这里提问。我希望你能帮助我。

所以我有这段代码,我把这段代码放在视图中:

foreach ($budget as $budget):
            if (array_key_exists('year', $_GET)) {
                $criteria = new CDbCriteria;
                $criteria->condition = 'year = ' . $_GET['year'];
                $criteria->addCondition('mapping_id = '. $budget->id);
                $yearBudget = YearlyBudget::model()->find($criteria);
            } else {
                $yearBudget = new YearlyBudget;
            } 
 endforeach;

然后在那段代码之后,我简单地回显这个:

echo $yearBudget->budget;

然后我得到了非对象错误。我只是不明白并停留在这段代码中。请帮忙,谢谢。

print_r($yearBudget); :

YearlyBudget Object(
[_new:CActiveRecord:private] => 
[_attributes:CActiveRecord:private] => Array
    (
        [id] => 1
        [mapping_id] => 1
        [year] => 2012
        [budget] => 2000000
        [balance] => 2000000
        [created] => 2013-11-20 10:16:29
        [updated] => 
    )

[_related:CActiveRecord:private] => Array
    (
    )

[_c:CActiveRecord:private] => 
[_pk:CActiveRecord:private] => 1
[_alias:CActiveRecord:private] => t
[_errors:CModel:private] => Array
    (
    )

[_validators:CModel:private] => 
[_scenario:CModel:private] => update
[_e:CComponent:private] => 
[_m:CComponent:private] => 

)

啊,对不起,如果我的英语不好..

【问题讨论】:

    标签: php yii


    【解决方案1】:

    在访问它的属性之前检查对象是否为空。

    if($yearBudget){
      echo $yearBudget->budget;
    }else{
      echo "No Yearly Budget with given criteria";
    }
    

    如果您没有得到想要的结果,请仔细检查条件

    $criteria->condition = 'year = ' . $_GET['year'];
    $criteria->addCondition('mapping_id = '. $budget->id);
    

    【讨论】:

    • 啊,可以了,谢谢...顺便问一下,这和model()->exist有什么区别?
    • find 方法如果没有找到任何东西,则返回 null,如果您首先检查现有记录,您将确定您有一个填充模型可以使用
    【解决方案2】:

    我强烈建议使用CHtml::value() 方法http://www.yiiframework.com/doc/api/1.1/CHtml#value-detail

    echo CHtml::value($yearBudget, 'budget');
    

    这在涉及多个相关对象时非常方便,您无需检查每个相关模型的存在来访问其属性

    echo CHtml::value($budget, 'company.fiscalYear.creator.id');
    

    【讨论】:

      【解决方案3】:

      在尝试使用您的标准找到模型后,您需要确保您拥有一个有效的模型:

      foreach ($budget as $budget):
                  if (array_key_exists('year', $_GET)) {
                      $criteria = new CDbCriteria;
                      $criteria->condition = 'year = ' . $_GET['year'];
                      $criteria->addCondition('mapping_id = '. $budget->id);
      
                      if(YearlyBudget::model()->exists($criteria)) // check if this exists
                          $yearBudget = YearlyBudget::model()->find($criteria);
                      else
                          $yearBudget = new YearlyBudget; // or throw an exception or something
                  } else {
                      $yearBudget = new YearlyBudget;
                  } 
       endforeach;
      

      【讨论】:

      • 我试过了,你说得对,它不存在。我不明白,我尝试 print_r() $yearBudget 并显示数组.. 我将编辑帖子以显示 print_r() 的结果
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多