【问题标题】:Laravel get collection dataLaravel 获取集合数据
【发布时间】:2017-12-19 19:28:41
【问题描述】:

下面是我的数组结果。我正在尝试访问子区域数据,但我一直运行到一个错误:

不能使用类型的对象作为数组

我用过$result[$some_imdex]->subLocality,但没用。

array:5 [▼
    0 => GoogleAddress {#204 ▼
    -id: "ChIJGzuDx6X1OxARcJhhmLrPLPs"
    -locationType: "ROOFTOP"
    -resultType: array:1 [▶]
    -formattedAddress: "27b Bolaji Street, Maroko, Lagos, Nigeria"
    -streetAddress: null
    -intersection: null
    -political: "Nigeria"
    -colloquialArea: null
    -ward: null
    -neighborhood: "Maroko"
    -premise: null
    -subpremise: null
    -naturalFeature: null
    -airport: null
    -park: null
    -pointOfInterest: null
    -establishment: null
    -subLocalityLevels: AdminLevelCollection {#205 ▶}
    -coordinates: Coordinates {#207 ▶}
    -bounds: Bounds {#208 ▶}
    -streetNumber: "27b"
    -streetName: "Adewale Kolawole Crescent"
    -subLocality: "Eti-Osa"
    -locality: "Lagos"
    -postalCode: null
    -adminLevels: AdminLevelCollection {#209 ▶}
    -country: Country {#212 ▶}
    -timezone: null
    -providedBy: "google_maps"
  }
  1 => GoogleAddress {#213 ▶}
  2 => GoogleAddress {#221 ▶}
  3 => GoogleAddress {#228 ▶}
  4 => GoogleAddress {#236 ▶}
]

【问题讨论】:

  • 你可以用collect($array)把一个数组变成一个集合,你试过吗?
  • 谢谢。不,我现在就试试看它是否有效
  • 我将其转为收藏,但我仍然无法访问“subLocality”数据
  • 你得到这个错误的索引是什么?真的是 0..4 吗?
  • 哦,已经是收藏了。很简单,你必须在上面使用收集方法。 $result->where('id', $some_id)->first()->property_you_want

标签: laravel laravel-5 geocode


【解决方案1】:

对象响应被包裹在一个数组中!

因此,您试图通过索引访问该数组中的对象,因此您会收到该错误。

你可以做什么:将数组转换为集合,然后映射到该集合:

collect($results)->filter($result){

    return $result->subLocality === 'some value';

});

filter() 方法将过滤集合并返回满足条件的元素。

或者如果你想返回一些特定的数据,那么使用map()

collect($results)->map($result){

    return [ 
            '0'=>$result->subLocality,
            '1'=>$result->someIndex,
         ];
});

map() 将从给定集合中返回一个转换后的数组。更多阅读Laravel Collection

【讨论】:

    【解决方案2】:

    因为这是一个集合,所以不能使用数组索引来获取具体的模型。您可以使用集合方法访问该模型,即 IE:

    $result->where('id', $some_id)->first()->subLocality
    

    【讨论】:

    • 您能提供更好的答案吗?
    • 您可以将集合作为数组访问,因为它们实现了 ArrayAccess 接口php.net/manual/en/class.arrayaccess.php
    • 我的立场是正确的,我刚刚尝试了几种不同的方法,似乎可以使用索引访问它。我不确定是什么导致了问题。
    【解决方案3】:
    • -私人
    • +公开
    • #受保护

    你不能直接在类之外访问你想要的属性作为它的私有而不是公共的。

    这个扩展AddressGoogleAddress 类具有访问所有这些字段的方法(getter)。

    $addressObject->getSubLocality();
    

    无论您是否有一个集合、一个数组或任何其他...您都无法直接访问该类的这些属性。

    您还可以选择在其中一个实例上调用 toArray() 以获取关联数组,这可能会更容易,具体取决于您正在执行的操作。

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      相关资源
      最近更新 更多