问题描述
我的学校应用中有一个小应用。我想展示一所学校的所有院系。事实上,在我的数据库中,一所学校可以有一个或多个学院,而一个学院可以属于一所或多所学校。
示范学校:
public function filieres ()
{
return $this->belongsToMany('App\Models\Filiere','etablissement_filieres','id_etablissements','id_filieres');
}
public function etablissement_filieres(){
return $this->hasMany('App\Models\Etablissement_filiere');
}
protected $fillable = [
'nom','image','ville','adresse','contact_1','contact_2','email','logo','presentation','brochure','localisation',];
模型表透视Etablissement_filiere
:
public function filiere(){
return $this->belongsTo('App\Models\Filiere');
}
protected $fillable = [
'id','id_filieres','prise_en_charge','prix',];
模型文件:
public function etablissements ()
{
return $this->belongsToMany(Etablissement::class,'etablissement_filiere');
}
protected $fillable = [
'nom','diplome_requis','diplome_obtenu','duree','type',];
控制器:
public function show($id)
{
$faculty = Etablissement_filiere::where('id_etablissements','=','$id')->get();
return view('etablissements/edhec/touteslesfilieresedhec',compact('faculty','etablissements'));
}
刀片视图:
@foreach($faculty->filieres as $filiere)
<div class="container bg-fil py-4 my-5">
<div class="row pl-5">
<div class="col-md-9">
<h6 class="font-weight-bold">{{ $filiere ->nom}} <br>
<span class="text-primary"> {{ $filiere ->diplome_obtenu}}</span></h6>
</div>
<div class="col-md-3 pt-n5">
<img src="{{asset($etablissement->image)}}" alt="">
</div>
</div>
<div class="row pl-5 mt-md-n5">
<div class="col-md-6">
<h6> <strong> Diplôme réquis</strong>: {{ $filiere ->diplome_requis}} <br>
<strong>Durée</strong>: {{ $filiere ->duree}} <br>
<strong>Montant de la formation</strong>: {{ $etablissement_filieres ->prix}}</h6>
</div>
<div class="col-md-6">
<h6> <strong> Mode d'etude</strong>: {{ $filiere ->type}} <br>
<strong>Prise en charge</strong>: {{ $etablissement_filieres ->prise_en_charge}}</h6>
</div>
</div>
<div class="row pl-5 mt-4">
<div class="col-md-6">
<a href="{{ route('inscription') }}" class="btn btn-success font-weight-bold w-75 Now">INSCRIVEZ VOUS MAINTENANT</a>
</div>
</div>
</div>
@endforeach
属性 [filieres] 在此集合实例上不存在。
你能告诉我错误在哪里阻止吗?
解决方法
将您的代码更改为
public function show($id)
{
$faculty = Etablissement_filiere::where('id_etablissements','=',$id)->first();
return view('etablissements/edhec/touteslesfilieresedhec',compact('faculty','etablissements'));
}
,
您的即时视图错误是在尝试评估 $faculty->filieres
时。
对 Model::where()->get()
之类的调用返回模型的 Collection 实例(就像一个可迭代的组),而不是单个模型。即使该集合只包含一个模型,它仍然是一个组,而不是模型本身。
因此,$faculty = Etablissement_filiere::where('id_etablissements','$id')->get();
返回一个 Collection,而不是单个模型。单个模型可能有一个 filieres
属性,但 Collection 实例(它本身是 Laravel 中的一个类)没有。因此,如果您想要的只是第一个结果,而不是集合,请以 ->first()
而不是 ->get()
结束该行。
然而,即使你解决了这个问题,你也会遇到第二个问题。您正在获取枢轴模型 Etablissement_filiere
的实例,然后尝试访问其上的 filieres
属性(它没有)。相反,您应该获得 School 模型的一个实例。如果你已经正确定义了你的关系,Laravel 会为你找到枢轴,所以你通常不会直接访问枢轴模型,除非你有特殊的理由。所以,在你的控制器中试试这个:
public function show($id)
{
$establissement = Etablissement::find($id);
$faculty = $establissement->filieres;
return view('etablissements/edhec/touteslesfilieresedhec','etablissement'));
}
然后在您看来:
@foreach($faculty as $filiere)
有更简洁的方法可以做到这一点(例如,查看一些关于路由模型绑定的教程),但这至少应该可以解决您当前代码的错误。