Laravel - Получение первой темы на форуме all () результат - PullRequest
0 голосов
/ 23 июня 2018

Я изучаю 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 голосов
/ 23 июня 2018

Вы можете определить другое сопоставление как hasOne в вашей модели, чтобы получить последнюю ветку по форуму, вызвать latest('id') в своем сопоставлении и передать id в качестве столбца для сортировки

public function latest_threads() {
    return $this->hasOne('App\Thread')->latest('id');
}

Тогда вы можете легко загрузить ваши отношения как

Forum::with('latest_threads')->get();
0 голосов
/ 23 июня 2018

Вы можете $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();
    }
}
...