【问题标题】:Laravel Collection Returns Inconsistant ResultsLaravel 集合返回不一致的结果
【发布时间】:2017-11-08 19:27:03
【问题描述】:

我有一个集合,可以在回复为array 或回复为object 之间随机切换。什么会导致这种情况发生?

$events = Event::all();

$events = $events->map(function ($event) use ($request) {
    $reducedEventName   = Helper::alphaNum($event->name);
    $reducedRequestName = Helper::alphaNum($request->name);
    $distance           = levenshtein($reducedEventName, $reducedRequestName);

    return [
        'name'     => $event->name,
        'url'      => route('event.view', ['slug' => $event->slug]),
        'distance' => $distance,
    ];
})
->filter(function ($event) {
    return $event['distance'] <= Helper::threshold($event['name']);
})
->take(3)
->sortBy('distance');

return $events->toArray();

这个方法是通过 XHR 调用的,所以我想要原始的 JSON 响应。有时它看起来像这样(????):

[{
  "name": "Taylor Swift - Reputation - Release",
  "url": "http:\/\/localhost\/e\/lgKejoPSg",
  "distance": 22
}, {
  "name": "Wiz Khalifa \"Laugh now, fly later\"",
  "url": "http:\/\/localhost\/e\/DdLnFD3Qf",
  "distance": 24
}]

有时它看起来像这样(??????):

{
  "1": {
    "name": "Wiz Khalifa \"Laugh now, fly later\"",
    "url": "http:\/\/localhost\/e\/DdLnFD3Qf",
    "distance": 18
  },
  "0": {
    "name": "Taylor Swift - Reputation - Release",
    "url": "http:\/\/localhost\/e\/lgKejoPSg",
    "distance": 23
  }
}

Laravel 5.4

【问题讨论】:

    标签: php laravel-5 collections


    【解决方案1】:

    至于您的问题,我不确定是什么导致这种情况发生,因为 sortBy() 方法声明它返回一个集合。您是否将确切的 $events 原样返回给您的刀片?如果是这样,这可能是浏览器决定如何处理发送回给它的集合的不一致。您始终可以在查询末尾使用 ->toArray() 以确保它始终返回一个数组,或者如果您不想对它做任何其他事情,则可以使用 ->toJson() 。

    【讨论】:

    • 是的,我原样退回。没有进行任何转变。我确实尝试了toArray(),但它并没有纠正这种行为。有时它是一个数组,有时是一个对象。 toJson() 也一样。
    • 我还测试了不同浏览器以及 Paw(REST API 工具)中的请求/响应,响应似乎是服务器的问题。
    • 这很有趣。如果 toArray() 没有抛出错误,那么它应该是一个集合实例并且应该能够变形为一个 json 字符串。查看集合类还有 jsonSerialize() 方法,它表示它将对象转换为 JSON 可序列化的东西。我想知道这是否有帮助。
    【解决方案2】:

    对结果进行排序尝试保留原始键,因此我需要丢弃原始键:

    return array_values($events->toArray());
    

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多