Laravel Eloquent通过created_at发布帖子并在Top上保留粘贴帖子

时间:2017-11-12 18:38:50

标签: mysql laravel eloquent laravel-eloquent

需要帮助从数据库中提取帖子并根据 created_at 列对其进行排序,但在订单顶部保留粘贴帖子(如在wordpress帖子系统中)。< / p>

粘贴帖子是post_data中的sticky_post列为真

public function index(PostFilter $filter)
{
    return Post::with(['author', 'category', 'tags'])
        ->withTrashed()
        ->filter($filter)
        ->paginate(request()->perPage ? request()->perPage : 15);
}

Post Schema如下:

Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->string('slug')->unique();
        $table->string('title');
        $table->text('body')->nullable();
        $table->text('excerpt')->nullable();
        $table->string('category_slug');
        $table->boolean('sticky_post')->default(false);
        $table->dateTime('publish_at')->nullable();
        $table->timestamps();
        $table->softDeletes();

        $table->unsignedInteger('featured_image_id')->nullable();

        $table->unsignedInteger('author_id');
        $table->foreign('author_id')->references('id')->on('users');
    });

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

orderBy()正在寻找:

public function index(PostFilter $filter)
{
    return Post::with(['author', 'category', 'tags'])
        ->withTrashed()
        ->filter($filter)
        ->orderBy('sticky_post', 'DESC')
        ->orderBy('created_at', 'DESC')
        ->paginate(request()->perPage ? request()->perPage : 15);
}

true由数据库中的1TINYINT(1))表示,因此所有粘性帖子都将按降序排序。任何具有相同sticky_post值的记录都将按created_at列进行排序。

所有粘性帖子将显示在顶部(最新的第一个),非粘性帖子将显示在粘贴帖子下方(最新的帖子)。