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