Laravel - 此集合实例上不存在属性 [filieres]

问题描述

我的学校应用中有一个小应用。我想展示一所学校的所有院系。事实上,在我的数据库中,一所学校可以有一个或多个学院,而一个学院可以属于一所或多所学校。

示范学校

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)

有更简洁的方法可以做到这一点(例如,查看一些关于路由模型绑定的教程),但这至少应该可以解决您当前代码的错误。