Laravel 5.2 从数据库获取数据时尝试获取非对象的 属性

Laravel 5.2 Trying to get property of non-object when getting data from database

我正在使用 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');
}
}

马蒂埃:

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

但是我得到这个错误

正在尝试获取 属性 的非对象

我该如何解决这个问题?谢谢

首先,你不需要在 hasMany 和 BelongsTo 中指定外键,这有点神奇,但通常 Eloquent 能够从外键中理解和搜索正确的 id (如果您在迁移文件中创建了对外关系)。

其次,当您在 blade 代码中执行 foreach 时,您调用 $mat->profs 其中 returns 如果我没记错的话 Collection 或数组而不是返回 Objects 的数组。所以这就是为什么您在尝试获取非 object.

的 属性 时出错的原因

所以要解决这个问题,您需要执行以下操作

@foreach ($matiere as $mat)
    @foreach ($mat->profs() as $pr)
        {{$pr->prenom}}
    @endforeach                
@endforeach

如果您在 $mat object 上调用方法 profs() 那么它 returns 一个 object 的数组。

好机会倒套房 ;)

我只用了一个foreach就解决了

@foreach ($matiere as $mat)
      {{ $mat->profs->prenom}}               
@endforeach