我有两个表SALARIES和POINTAGES,它们之间的关系hasManyToToTo,我想为每个POINTAGE显示一个SALARIES对应,但这给了我这个错误:
未定义的属性:stdClass :: $ salarie
consulter.blade.php
@foreach($pointages as $pointage)
<tr>
<td>{{ $pointage->datep }}</td>
<td>{{ $pointage->chantier }}</td>
<td>{{ $pointage->ouvrage }}</td>
<td>{{ $pointage->nbrj }}</td>
<td>{{ $pointage->solde }}</td>
<td>{{ $pointage->salarie->nom }}</td>
</tr>
@endforeach
Pointage.php
protected $fillable = [
'salarie_id', 'datep', 'solde', 'nbrj' , 'ouvrage' , 'chantier' , 'prime' ,
];
public function salarie(){
return $this->belongsTo('App\Salarie');
}
Salarie.php
public function pointages(){
return $this->hasMany('App\Pointage');
}
pointages
迁移:
public function up(){
Schema::table('pointages', function (Blueprint $table) {
$table->integer('salarie_id')->unsigned()->after('id');
$table->foreign('salarie_id')->references('id')->on('salaries');
});
}
SalarieController.php
public function consulter(){
$salaries = Salarie::with('pointages')->get();
$pointages = DB::table('pointages')->get();
return view('salarie.consulter', compact('salaries','pointages'));
}
答案 0 :(得分:0)
如果要使用一种关系,例如public function salarie()
模型上的Pointage
,则需要实际查询它。不要使用DB::table()
,请使用Pointage
:
$pointages = Pointages::get();
此外,为避免在循环$pointages
时出现其他查询,请尽快加载您的关系:
$pointages = Pointages::with(["salarie"])->get();
总而言之,DB::table()
不会返回Pointage
模型,因此您不能使用->salarie
。使用您的模型。
编辑:Pointage
可能没有关联的Salarie
,因此您需要进行处理。通过->has()
查询来增强关系,或者在循环时检查:
$pointages = Pointages::with(["salarie"])->has("salarie")->get();
或者,在您看来:
@if($pointages->salarie)
<td>{{ $pointage->salarie->nom }}</td>
@else
<td>No Salarie...</td>
@endif