php – 对象存在但是试图获取非对象的属性

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 对象存在但是试图获取非对象的属性脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 PHP 5.5.12和MysqL 5.6.17开发Laravel5上的项目
昨天一切都很好,但是当我今天回到我的代码时,
我在多个模型对象上有错误“试图获取非对象的属性”,这种情况经常发生在与其他模型有关系时.

如果我写这个:

$test = $model->relation->PRoPErty;

我收到了错误.

如果我写这个:

echo / var_dump($model->relation->property);

然后它打印没有问题.

我真的不知道发生了什么,任何帮助都会非常感激.

Ps:对不起,如果我写的文字错了,这是我第一次在stackoverflow问问题:)
哦,我确实已经阅读了所有类似的问题

这是Stay.PHP模型:

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class Stay extends CustomModel {

protected $table = 'stay';

protected $fillable = array('reservation_terms_convention_id','reservation_id','period_id','total_price','price_ht','occupant_id','prestation_fixe_id','pax','checkin','checkout');

protected $Guarded = array('id');

static public $mailTemplatingWhITelist = ['total_price'];

public static $rules = [
'reservation_terms_convention_id' => 'required|exists:reservation_terms_convention,id','period_id' => 'required|exists:period,'payeur_id' => 'required'
];


    public function payment_due_date()
    {
        return $this->belongsTo('App\models\PaymentDueDate','payment_due_date_id','id');
    }
}

这是相关的型号:

<?PHP namespace App\models;

use Illuminate\Database\Eloquent\Model;

class PaymentDueDate extends CustomModel {


protected $table = 'payment_due_date';

protected $fillable = array('total_amount','acompte_amount','amount_ht','amount_already_payed','payment_total_date','payment_acompte_date','facturation_date','description_facture','type','cash_desk_id','individual_customer_id','partner_id','direction');

protected $guarded = array('id');


public function stay(){
    return $this->hasOne('App\models\Stay');
}

}

最后控制器:

public function print_partner_invoice($partner_id,$echeance = 0)

    $partner = Partner::find($partner_id);

    // this return Collection of model
    $partner_resa = Partner::reservations_echeance($partner->id,$echeance);

    if(!$partner || $partner_resa->count() < 1)
        abort(403);



    $residence_company = $partner_resa->First()->residence->residence_company;

    $total_ttc = 0;
    $already_paid = 0;
    $tva_amount = 0;


    foreach ($partner_resa as $key => $resa) {

        foreach ($resa->stays as $key => $stay) {
            $amount = $stay->payment_due_date->total_amount;
        }

    }

    $pDF = \PDF::loadView('reglement.partner_invoice',[
        'partner'               => $partner,'resas'                 => $partner_resa,'residence_company'     => $residence_company,'total_ttc'             => $total_ttc,'already_paid'          => $already_paid,'tva_amount'            => $tva_amount
        ]);

    return $pdf->stream();
}

解决方法

首先,如果你写

VAR_dump($doesnotexists1->doesnotexists2->doesnotexists3);

它的null,没有错误,因为var_dump查找$doesnotexists1,如果它为null,它将不会进一步查找.所以你没有得到“试图获得非对象的属性”Execption.

所以,你的问题可能是$stay或$stay-> payment_due_date at

$amount = $stay->payment_due_date->total_amount;

为空/空.

我会检查它

foreach ($partner_resa as $key => $resa) {

    foreach ($resa->stays as $key => $stay) {
      if(is_object(stay) && is_object($stay->payment_due_date)) {
        $amount = $stay->payment_due_date->total_amount;
      }
    }
}

确保它是一个对象

脚本宝典总结

以上是脚本宝典为你收集整理的php – 对象存在但是试图获取非对象的属性全部内容,希望文章能够帮你解决php – 对象存在但是试图获取非对象的属性所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。