我正在使用laravel 5.2我有2个模型
教授:
class Prof extends Model
{
protected $fillable=array('nom','prenom','age','mail');
public function matieres(){
return $this->hasMany(Matiere::class,'id_prof');
}
}
Matiere:
class Matiere extends Model
{
protected $fillable=array('Nom');
public function profs(){
return $this->BelongsTo(Prof::class,'id_prof');
}
}
在MatiereController中,我有一个方法,它给了我所有的Matieres:
public function index()
{
$matiere = Matiere::all();
return view('Matiere.index',compact('matiere'));
}
在我的视图中,我显示了我的Matiere列表以及使用
教授此主题的教授的名字(Matiere) @foreach ($matiere as $mat)
@foreach ($mat->profs as $pr)
{{$pr->prenom}}
@endforeach
@endforeach
但是我得到了这个错误
尝试获取非对象的属性
我怎么能解决这个问题? thnks
答案 0 :(得分:0)
首先,你不需要在hasMany和BelongsTo中指定外键,这有点神奇,但通常Eloquent能够理解并从外键中搜索正确的id(如果你创建了外交关系)在迁移的文件中。)
其次,当您在刀片代码中执行foreach时,如果我没有错误的Collection或数组而不是返回一个Objects数组,则调用$mat->profs
返回。这就是为什么你得到一个错误,试图得到一个非对象的属性。
因此,要解决此问题,您需要执行以下操作
@foreach ($matiere as $mat)
@foreach ($mat->profs() as $pr)
{{$pr->prenom}}
@endforeach
@endforeach
如果在profs()
对象上调用方法$mat
,则会返回一个对象数组。
Bonne chance pour la suite;)
答案 1 :(得分:0)
我只使用一个foreach来修复它
@foreach ($matiere as $mat)
{{ $mat->profs->prenom}}
@endforeach