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

时间:2017-03-15 14:48:03

标签: laravel orm laravel-5.2 blade

我正在使用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

2 个答案:

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