Получить значение объекта внутри коллекции - PullRequest
0 голосов
/ 05 февраля 2019

Я использую DataTables как Сервис от Yajra в своем приложении Laravel.

У меня есть такая коллекция:

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

Я думаю, что это очень простая проблема для вас ...

Но я не могу отобразить значение атрибута key.(Я хочу показать имя: Доу).-> Атрибуты - это объект внутри моей коллекции.

Спасибо, что помогли мне разблокировать ...

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Если я правильно понимаю, вы хотите, чтобы вы могли отображать ключ и значение атрибутов.

Если вы используете blade-сервер, вы можете попробовать расширенный цикл 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;

Если ИМЯ не найдено, оно вернется к тому, что следует после ??,которая является пустой строкой в ​​примере выше.Это хороший прием, чтобы избежать ошибок, если атрибут не существует.Он делает то же самое, что и троичная проверка, если он равен нулю:

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

Это явно грязно, так что оператор null-coalesce пригодится!

0 голосов
/ 07 февраля 2019

Хорошо, @GoogleMac поставил меня на трек.Фактически, поскольку атрибут NAME присутствует не всегда, я должен протестировать переменную с помощью функции

    isset()

, а не

    !== NULL

с

    {{ isset($attributes->NOM) ? $attributes->NAME : 'NC' }}

Код работает очень хорошо.

Спасибо @GoogleMac и @ Davit

0 голосов
/ 05 февраля 2019

Вы должны просто сделать что-то вроде:

@foreach($collection as $item)
  {{$item->NAME}}
@endforeach

Примечание: NAME должно быть ключом в переменной атрибутов.

Переменная атрибутов защищена, поэтому вы не можете ссылаться на неенепосредственно снаружи объекта.Значение будет автоматически отображено, если вы ссылаетесь на него через объект, которому оно принадлежит.

...