【问题标题】:Laravel eloquent multiple queriesLaravel 雄辩的多个查询
【发布时间】:2019-06-22 10:22:37
【问题描述】:

我需要按日期对我的集合进行排序,然后按距离对具有相同日期的行进行排序。

当我处理状态和距离时,我已经完成了相同的过程,因为我知道我想要对集合进行排序的状态值,现在我无法修复它的值。

这是我的工作状态:

if($result){
        if($data['status'] == true){
            $result = $result->sortBy('listing.status')->values();

            if($sqlDistance != null){
                $res = $result->where('distance_km', '!=', null);

                $resNull = $result->where('distance_km', '=', null)->all();

                $statusNotPlanned = $res->where('listing.status', 0)->sortBy('distance_km')->values()->all();
                $statusPlanned = $res->where('listing.status', 1)->sortBy('distance_km')->values()->all();
                $statusDone = $res->where('listing.status', 2)->sortBy('distance_km')->values()->all();

                $res = array_merge($statusNotPlanned, $statusPlanned, $statusDone);
                $result = array_merge($res, $resNull);
            }

            return response()->json(['status' => 200,'type' => 'status', 'data' => $data, 'events' => (is_object($result)) ? array_slice($result->toArray(),$data['offset']*10,10) : array_slice($result,$data['offset']*10,10), 'cities' => $cities]);
        }

现在我需要做同样的事情,但使用日期而不是状态:

这是我现在的位置:

 elseif($data['date'] == true ) {
            $result = $result->sortBy('date_end')->values();

            $res = $result->where('date_end', '!=', null)->all();
            $resNull = $result->where('date_end', '=', null)->all();
            $result = array_merge($res, $resNull);

            return response()->json(['status' => 200,'type' => 'date', 'data' => $data, 'events' => (is_object($result)) ? array_slice($result->toArray(),$data['offset']*10,10) : array_slice($result,$data['offset']*10,10), 'cities' => $cities]);
        }

这是我当前的输出:

    {
    date_end : 12/07/2018,
    distance : 320km

    },
   {
  date_end : 12/08/2018,
  distance : 110km

   },
   {
  date_end : 12/08/2018,
  distance : 100km

    },
   {
    date_end : 12/08/2018,
   distance : 120km

   },
    {
    date_end : 12/09/2018,
    distance : 480km

    }

这是所需的输出:

   {
  date_end : 12/07/2018,
  distance : 320km

    },
     {
    date_end : 12/08/2018,
    distance : 100km

    },
    {
    date_end : 12/08/2018,
    distance : 110km

    },
    {
   date_end : 12/08/2018,
   distance : 120km

},
{
  date_end : 12/09/2018,
  distance : 480km

}

【问题讨论】:

    标签: php mysql laravel eloquent laravel-query-builder


    【解决方案1】:

    这个 Github 上有人 issue 提出以下建议:

    $result->sortBy(function($item) {
          return [$item->date_end, $item->distance_km];
    });
    

    【讨论】:

    • 感谢您的回复,但是您的方法返回的数据与我已经完成的完全相同,它没有考虑具有相同 $date_end 值的行并按距离对其进行排序。
    • 我不确定你的意思。如果您可以添加示例输入和输出结果,它可能会有所帮助。例如,向我们展示您之前的数据、您获得的结果以及您期望的结果。
    • 它对我不起作用,因为 date_end 属性包含小时和分钟,我只需要按天排序。谢谢您的回复
    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2018-01-26
    • 2021-07-23
    • 2017-11-11
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多