首页 > 解决方案 > 获取集合内对象的值

问题描述

我在 Laravel 应用程序中使用来自 Yajra 的 DataTables as Service。

我有一个这样的集合:

Collection {#1178
    #items: array:2 [
    0 => array:7 [
      "email" => "user1@example.com"
      "id" => 6
      "emailBlacklisted" => false
      "smsBlacklisted" => false
      "modifiedAt" => "2019-02-05T17:20:17.723+01:00"
      "listIds" => array:2 [
        0 => 2
        1 => 3
      ]
      "attributes" => {#1139
        +"NAME": "Doe"
        +"FIRSTNAME": "John"
      }
    ]
    1 => array:7 [
      "email" => "user2@example.com"
      "id" => 1
      "emailBlacklisted" => false
      "smsBlacklisted" => false
      "modifiedAt" => "2019-02-05T21:12:04.094+01:00"
      "listIds" => array:1 [
        0 => 2
      ]
      "attributes" => {#1143}
    ]
  ]
}

在我的刀片视图中,我使用 {{ $email }} -> Simple 显示电子邮件值

我认为这对你来说是一个非常容易的问题......

但我无法显示属性键的值。(我想显示名称:Doe)。-> 属性是我收藏中的一个对象。

谢谢你帮我解锁...

标签: phplaravelobjectlaravel-collection

解决方案


如果我理解正确,您希望能够显示属性的键和值。

如果您使用刀片,您可以尝试扩展的 foreach 循环:

@foreach($attributes as $key => $value)
    {{ $key }}: {{ $value }}
@endforeach

这假设您已经可以访问每个单独模型的属性,例如$item->email或 在这种情况下$item->attributes。如果需要,您可以@foreach($item->attributes as $key => $value)启动它。


如果您只想显示特定值,请使用 null-coalesce 运算符??

$item->attributes['NAME'] ?? ''

您可以在其他地方的逻辑中使用任何可能为空的表达式:

// the fallback does not have to be a string
$person = Person::find($id) ?? Person::first();

// it can be chained
$value = $parameter ?? $localDefault ?? $globalDefault;

如果找不到 NAME,它将回退到 后面的内容??,在上面的示例中它是一个空字符串。如果属性不存在,这是避免任何错误的好方法。它与三元检查它是否为空做同样的事情:

($item->attributes['NAME'] !== null) ? $item->attributes['NAME'] : '';

这显然很混乱,所以 null-coalesce 运算符派上用场了!


推荐阅读