Laravel-每个论坛的第一个线程获得all()结果

时间:2018-06-23 13:08:05

标签: ajax laravel vue.js eloquent

我正在学习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::尝试获取每个论坛的最新主题,而不必遍历所有论坛。

2 个答案:

答案 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();