我的数据库中有一本书的清单,每本书都有章节。我的模特是
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
答案 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';
});