Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php yii:尝试获取非对象的属性_Php_Yii - Fatal编程技术网

Php yii:尝试获取非对象的属性

Php yii:尝试获取非对象的属性,php,yii,Php,Yii,嗯,我找到了,但我看不出这和我的错误有什么关系。。我是新手——我知道这个借口是不可接受的,但在我提出这个问题之前,我会先找到解决办法。我希望你能帮助我 所以我有这个代码,我把这个代码放在视图中: foreach ($budget as $budget): if (array_key_exists('year', $_GET)) { $criteria = new CDbCriteria; $criteria-

嗯,我找到了,但我看不出这和我的错误有什么关系。。我是新手——我知道这个借口是不可接受的,但在我提出这个问题之前,我会先找到解决办法。我希望你能帮助我

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

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;
然后我得到了非对象错误。我就是不明白,我被困在这段代码里了。请帮忙,谢谢

打印(年度预算);:

)


啊,如果我的英语不好,很抱歉。

您需要确保在根据您的标准查找模型后,您有一个有效的模型:

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;

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

if($yearBudget){
  echo $yearBudget->budget;
}else{
  echo "No Yearly Budget with given criteria";
}
如果没有得到理想的结果,请仔细检查条件

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

我强烈建议使用
CHtml::value()
方法

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

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

我试过了,你说得对,它是不存在的。我不明白,我试着打印$yearBudget,它显示了数组。。我将编辑帖子以显示打印的结果。啊,它很有效,谢谢。。。顺便问一下,这与model()->exist之间有什么区别?如果找不到任何东西,find方法将返回null,如果您首先检查现有记录,您将确保有一个填充的模型可以使用
echo CHtml::value($yearBudget, 'budget');
echo CHtml::value($budget, 'company.fiscalYear.creator.id');