Хобрук: Ваш путь к мастерству в программировании

Самые последние обновления в Laravel

У меня есть список книг в моей базе данных, и в каждой книге есть главы. мои модели

Книги.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

Глава.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

Вариант 1:

Вы должны использовать соединения в запросе:

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

Вариант 2:

Если вам не нужна разбивка на страницы и вы хотите показать все книги на одной странице, вы можете попробовать отсортировать коллекцию по значению отношения.

Добавьте отношение lastChapter:

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';
    });
12.12.2018
  • есть ли способ получить только 5 последних обновленных книг для отображения в представлении? 12.12.2018
  • @Imperatur добавьте ->limit(5) к запросу. 12.12.2018
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..