我需要一点澄清。
此错误消息“尝试获取非对象的属性”到使用Eloquent时引用的内容?我要疯了。我正在使用一个函数:
public function squadra_post()
{
return $this->hasMany('Squadra','id_squadra');
}
这是扩展Eloquent Post的模型。通话时:
<?php $squadra = Post::find($roles->id_squadra)->squadra_post; ?>
给了我之前提到的错误。
修改
他的课程是他们的方法。给出问题的是“squadra_post()”我需要通过表中的id_squadra发布内容来提取团队名称。
class Post extends Eloquent implements UserInterface, RemindableInterface
{
protected $table = 'post';
protected $primaryKey = 'id_post';
public $timestamps = false;
public function commenti()
{
return $this->hasMany('Commento','id_post');
}
public function apprezzamenti()
{
return $this->hasMany('Apprezzamenti','id_post');
}
public function squadra_post()
{
return $this->hasMany('Squadra','id_squadra');
}
}
这是“squadra”类的代码
class Squadra extends Eloquent implements UserInterface, RemindableInterface
{
protected $table = 'squadra';
protected $primaryKey = 'id_squadra';
public $timestamps = false;
}
最后,这是给我带来问题的代码。这就是给我错误的方法:试图获得非对象的属性
@foreach($post['post'] as $roles)
@if($roles->id_squadra != 0)
$squadra = Post::find($roles->id_squadra)->squadra_post;
@foreach($squadra as $squadra_post)
{{ $squadra->nome }}
@endforeach
@endif
@endforeach
答案 0 :(得分:0)
在第
行$squadra = Post::find($roles->id_squadra)->squadra_post;
squadra_post()
方法
返回一个对象集合(我猜的帖子),而不是一个对象,因为你的关系的性质(1到多),而Post::find()
返回对象。我认为这是错误发生的地方。
尝试以下代码
$squadra = Post::find($roles->id_squadra);
if ($squadra) {
echo $squadra->name;
foreach ($squadra->squadra_post as $post) {
echo $post->title;
echo $post->content; //etc
}
}
修改强>
此外,您必须确保外键是您在id_squadra
方法中声明的squadra_post()
。
答案 1 :(得分:0)
当你厌倦了试图找到特定的帖子时,它找不到它,因此它会抛出一个异常,说“试图获得非对象的属性”。如果它找到了帖子,它将返回squadra_post并且它将存储在变量中。
但相反,它无法找到那个特定的,无法用它构造一个对象,因此无法找到特定的属性名称squadra_post。因此错误“试图获取非对象的属性”。
您可以通过将代码放在try和catch块中来处理此异常。
答案 2 :(得分:0)
首先,你的关系不会以这种方式运作,因为 Laravel 4+希望关系名称为camelCased
,然后才能使用dynamic properties。
因此,将其重命名为squadraPost()
,并将其称为$post->squadraPost
,如果是hasMany
,则无论是否存在任何相关模型或Collection
,您都会在此处获得null
不
接下来就是检查相关模型是否存在 - 为此,请阅读以下答案:Laravel check if related model exists
最后,但并非最不重要:您可能会从find()
方法获得$post = Post::find(..)
,因此请先确认:
null
返回您的模型,而不是if ($post) $post->squadraPost;
。只有这样才能称之为关系:
{{1}}