【发布时间】:2015-10-21 13:57:06
【问题描述】:
我正在使用 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,id',
'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 输出是什么样子的
-
ReglementController.php 第 99 行中的ErrorException:尝试在 ReglementController.php 第 99 行中获取非对象的属性 此行产生错误:$amount = $stay->payment_due_date->total_amount;如果我写 var_dump($stay->payment_due_date->total_amount) 我没有错误
标签: php laravel-5 eloquent relationship