Laravel中的最新更新

时间:2018-12-12 10:33:22

标签: laravel-5 eloquent vuejs2

我的数据库中有一本书的清单,每本书都有章节。我的模特是

Books.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    protected $guarded = [];

    public function chapters()
    {
        return $this->hasMany(Chapter::class);
    }
}

Chapter.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Chapter extends Model
{
    protected $guarded = [];

    public function book()
    {
        return $this->belongsTo(Book::class);
    }
}

如何创建一个页面,以按顺序从最新到旧显示书籍? 同样,顺序基于要更新或添加到书中的章节。如果其中一本旧书要增加一章来进行更新,则该书将首先显示在最近更新的书中。 谢谢!

我正在使用Laravel 5.6和Vue JS

1 个答案:

答案 0 :(得分:1)

选项1:

您应在查询中使用联接:

$books = Books::select('books.*')
    ->leftJoin('chapters', 'chapters.book_id', '=', 'books.id')
    ->groupBy('books.id')
    ->orderByDesc('chapters.updated_at')
    ->get();

选项2:

如果您不需要分页并且想要在一页中显示所有书籍,则可以尝试按关系值对馆藏进行排序。

添加最新的章节关系:

public function latestChapter()
{
    return $this->hasOne(Chapter::class)->orderByDesc('updated_at');
}

获取和排序:

$books = Books::with('latestChapter')->get();

$books = $books->sortByDesc(function($item){
        return $item->latestChapter ? $item->latestChapter->updated_at : '1970-01-01';
    });