获取 Collection 中 Object 的值
Get value of an Object inside a Collection
我在我的 Laravel 应用程序中使用来自 Yajra 的 DataTables 作为服务。
我有一个这样的 collection :
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}
]
]
}
在我的 blade 视图中,我使用 {{ $email }} -> Simple
显示电子邮件值
我觉得这对你来说是个很简单的问题...
但是我无法显示属性键的值。 (我想显示名称:Doe)。
-> attributes 是我的 collection.
中的一个 object
谢谢你帮我解锁...
你应该简单地做这样的事情:
@foreach($collection as $item)
{{$item->NAME}}
@endforeach
注意:NAME 必须是属性变量中的键。
attributes 变量是受保护的,因此您不能直接从对象外部引用它。如果您通过拥有它的对象引用它,该值将被自动映射。
如果我没理解错的话,您希望能够显示属性的键和值。
如果您正在使用 blade,您可以尝试扩展的 foreach 循环:
@foreach($attributes as $key => $value)
{{ $key }}: {{ $value }}
@endforeach
这假设您已经可以访问每个单独模型的属性,例如 $item->email
或本例中的 $item->attributes
。如果需要,您可以执行 @foreach($item->attributes as $key => $value)
来启动它。
如果您只想显示特定值,请使用空合并运算符 ??
。
$item->attributes['NAME'] ?? ''
您可以在其他地方的逻辑中使用任何可能为 null 的表达式:
// 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'] : '';
这显然很麻烦,所以空合并运算符就派上用场了!
好的,@GoogleMac 让我走上正轨。
事实上,由于 NAME 属性并不总是存在,我必须使用
测试变量
isset()
函数而不是
!== NULL
有
{{ isset($attributes->NOM) ? $attributes->NAME : 'NC' }}
代码运行良好。
谢谢@GoogleMac 和@Davit
我在我的 Laravel 应用程序中使用来自 Yajra 的 DataTables 作为服务。
我有一个这样的 collection :
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}
]
]
}
在我的 blade 视图中,我使用 {{ $email }} -> Simple
显示电子邮件值我觉得这对你来说是个很简单的问题...
但是我无法显示属性键的值。 (我想显示名称:Doe)。 -> attributes 是我的 collection.
中的一个 object谢谢你帮我解锁...
你应该简单地做这样的事情:
@foreach($collection as $item)
{{$item->NAME}}
@endforeach
注意:NAME 必须是属性变量中的键。
attributes 变量是受保护的,因此您不能直接从对象外部引用它。如果您通过拥有它的对象引用它,该值将被自动映射。
如果我没理解错的话,您希望能够显示属性的键和值。
如果您正在使用 blade,您可以尝试扩展的 foreach 循环:
@foreach($attributes as $key => $value)
{{ $key }}: {{ $value }}
@endforeach
这假设您已经可以访问每个单独模型的属性,例如 $item->email
或本例中的 $item->attributes
。如果需要,您可以执行 @foreach($item->attributes as $key => $value)
来启动它。
如果您只想显示特定值,请使用空合并运算符 ??
。
$item->attributes['NAME'] ?? ''
您可以在其他地方的逻辑中使用任何可能为 null 的表达式:
// 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'] : '';
这显然很麻烦,所以空合并运算符就派上用场了!
好的,@GoogleMac 让我走上正轨。 事实上,由于 NAME 属性并不总是存在,我必须使用
测试变量 isset()
函数而不是
!== NULL
有
{{ isset($attributes->NOM) ? $attributes->NAME : 'NC' }}
代码运行良好。
谢谢@GoogleMac 和@Davit