我正在使用Laravel创建论坛软件,并且我尝试使用我的模型中定义的latestPost
访问特定主题中的最新帖子
public function latestPost() {
return $this->hasOne('App\Post')->with('thread')->with('author')->latest();
}
以下是App\Post.php
public function author()
{
return $this->belongsTo('App\User', 'author_id');
}
public function thread()
{
return $this->belongsTo('App\Thread', 'thread_id');
}
public function topic() {
return $this->belongsTo('App\Topic');
}
我能够访问线程,作者等帖子没问题,当我在视图中有{{ $topic->latestPost }}
时,它会成功列出对象,包括关系。但是,只要我尝试显示{{ $topic->latestPost->author->username }}
这样的特定部分,我就会收到以下错误:Trying to get property of non-object
在此特定视图中,主题是从控制器中的类别中提取的另一种关系,并使用$topics
上的@foreach
获取$categories->topics
:
public function index() {
$categories = Category::orderBy('order', 'asc')->get();
return view('welcome', compact('categories'));
}
以下是$categories
:http://dumptext.com/H8Nq16ea
答案 0 :(得分:0)
也许你想使用嵌套的预先加载。
更改:return $this->hasOne('App\Post')->with('thread')->with('author')->latest();
对此:return $this->hasOne('App\Post')->with('thread.author')->latest();
此外,我从未听说过latest()和return语句的结尾。也许你可以使用orderBy尝试它,如下所示。
`return $this->hasOne('App\Post')->with('thread.author')->orderBy('id')->first;`
如果结果不符合您的要求,我猜您可以使用orderBy(' id') - > reverse()函数。让我知道它是否帮助了你。
答案 1 :(得分:0)
您应该确保您拥有要显示的最新帖子的作者。否则,如果您希望每条记录都没有,那么您应该尝试:
{{ $topic->latestPost->author ? $topic->latestPost->author->username : 'No author' }}
另外代替:
return $this->hasOne('App\Post')->with('thread')->with('author')->latest();
你可以使用
return $this->hasOne('App\Post')->with('thread','author')->latest();