php – 对象存在但是试图获取非对象的属性
发布时间:2020-12-13 22:23:13 所属栏目:PHP教程 来源:网络整理
导读:我正在使用 PHP 5.5.12和MYSQL 5.6.17开发Laravel5上的项目 昨天一切都很好,但是当我今天回到我的代码时, 我在多个模型对象上有错误“试图获取非对象的属性”,这种情况经常发生在与其他模型有关系时. 如果我写这个: $test = $model-relation-property; 我收
我正在使用
PHP 5.5.12和MYSQL 5.6.17开发Laravel5上的项目
昨天一切都很好,但是当我今天回到我的代码时, 我在多个模型对象上有错误“试图获取非对象的属性”,这种情况经常发生在与其他模型有关系时. 如果我写这个: $test = $model->relation->property; 我收到了错误. 如果我写这个: echo / var_dump($model->relation->property); 然后它打印没有问题. 我真的不知道发生了什么,任何帮助都会非常感激. Ps:对不起,如果我写的文字错了,这是我第一次在stackoverflow问问题:) 这是Stay.php模型: namespace Appmodels; use IlluminateDatabaseEloquentModel; 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('AppmodelsPaymentDueDate','payment_due_date_id','id'); } } 这是相关的型号: <?php namespace Appmodels; use IlluminateDatabaseEloquentModel; 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('AppmodelsStay'); } } 最后控制器: 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; } } } 确保它是一个对象 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |