Laravel 查询生成器 : How do I sort results by date - first with ascending order by future dates and then by descending order by past dates?

标签 laravel laravel-5 eloquent laravel-5.4 laravel-query-builder

我有一个模型tasks,其中包含过去datetime的完整任务以及 future datetime即将执行的任务。

在检索任务时,我想按升序显示即将到来的任务(从现在到 future ),并按降序显示过去的任务(从现在到过去)。

public function getTasks()
{
        $futureTasks = Task::whereDate('datetime', '>', Carbon::now())->orderBy('datetime', 'asc')->get();
        $pastTasks   = Task::whereDate('datetime', '<', Carbon::now())->orderBy('datetime', 'desc')->get();
        $tasks       = array_merge($futureTasks, $pastTasks);
        $response    = ['tasks' => $tasks];
        // return...
}

我收到以下错误:

array_merge(): Argument #1 is not an array

如果我颠倒 array_push 函数的参数顺序,我仍然会遇到相同的错误。

 public function getTasks()
{
        $futureTasks = Task::whereDate('datetime', '>', Carbon::now())->orderBy('datetime', 'asc')->get();
        $pastTasks   = Task::whereDate('datetime', '<', Carbon::now())->orderBy('datetime', 'desc')->get();
        $tasks       = array_merge($pastTasks, $futureTasks);
        $response    = ['tasks' => $tasks];
        // return...
}

如果我只检索 futureTasks 或 PastTasks 而不使用 array_merge,我会得到所需的输出。

public function getTasks()
{
        $futureTasks = Task::whereDate('datetime', '>', Carbon::now())->orderBy('datetime', 'asc')->get();

        $response    = ['tasks' => $futureTasks];
        // return...
}

我在这里做错了什么?非常感谢您的宝贵时间。

最佳答案

两个结果都是一个集合。您可以使用集合merge方法。

public function getTasks()
{
    $futureTasks = Task::whereDate('datetime', '>', Carbon::now())
        ->orderBy('datetime', 'asc')
        ->get();

    $pastTasks = Task::whereDate('datetime', '<', Carbon::now())
        ->orderBy('datetime', 'desc')
        ->get();

    $tasks = $futureTasks->merge($pastTasks);
    $response = compact('tasks');
    // return...
}

由于您使用的是 whereDate 条件,因此您会丢失基于查询的当前日期的所有数据。您可能想检查一下。

关于Laravel 查询生成器 : How do I sort results by date - first with ascending order by future dates and then by descending order by past dates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352203/

相关文章:

php - 使用邮件时找不到类 'PhpParser\Parser\Php7' Laravel

laravel - 如何在特征中配置 Laravel 模型属性?

php - laravel中的多个文件上传验证

php - Laravel:具有关系的查询构建器

php - Laravel 5 在 ajax 请求上随机发送 500 Internal Server Error

php - Laravel 5.2 - 修改模型的构建器

php - Eloquent 同步和 created_at/updated_at

php - Laravel 5.1 模型工厂种子错误

php - 如何覆盖验证规则登录 Laravel\Fortify?

php - Laravel SSL 与 MySQL 的连接无法正常工作