我正在学习VueJS并试图开发一个论坛系统 我正在尝试从我的论坛模型中每个论坛的线程关系中获取最新帖子。
这是我的论坛模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Forum extends Model
{
public $table = 'forums';
public $timestamps = false;
public function threads() {
return $this->hasMany('App\Thread')->orderBy('id', 'DESC');
}
public function getFirstThread() {
return $this->threads()->first();
}
}
所以我认为也许可以,但是没有成功
Forum::with('getFirstThread')->get();
有什么主意可以实现这一目标,而不必遍历所有内容并获得每个结果的第一个线程?
TLDR::尝试获取每个论坛的最新主题,而不必遍历所有论坛。
答案 0 :(得分:1)
您可以使用$append
getMethodNameAttribute()
来获得方法结果
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Forum extends Model
{
public $table = 'forums';
public $timestamps = false;
protected $appends = ['firstthread'];
public function threads() {
return $this->hasMany('App\Thread')->orderBy('id', 'DESC');
}
public function getFirstThreadAttribute() {
return $this->threads()->first();
}
}
答案 1 :(得分:0)
您可以在模型中定义另一个映射为hasOne
,以获取每个论坛的最新主题,在映射上调用latest('id')
,并将id
作为要排序的列传递
public function latest_threads() {
return $this->hasOne('App\Thread')->latest('id');
}
然后,您可以轻松地将您的关系加载为
Forum::with('latest_threads')->get();