未定义的属性:stdClass :: $ salarie

时间:2019-07-09 18:12:32

标签: php laravel

我有两个表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'));
}

1 个答案:

答案 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