J'utilise DataTables as Service de Yajra dans mon application Laravel.
J'ai une collection comme celle-ci:
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}
]
]
}
Dans ma vue en lame, j'affiche la valeur de l'e-mail avec { {$ email}} -> Simple
Je pense que c'est un problème très simple pour vous ...
Mais je ne peux pas afficher la valeur de la clé des attributs. (Je veux montrer le NOM: Doe). -> attributes est un objet dans ma collection.
Merci de m'aider à déverrouiller ...
3 Réponses :
Vous devez simplement faire quelque chose comme:
@foreach($collection as $item)
{{$item->NAME}}
@endforeach
Remarque: NAME doit être une clé dans la variable des attributs.
La variable des attributs est protégée, vous pouvez donc ' t le référencer directement de l'extérieur de l'objet. La valeur sera automatiquement mappée si vous la référencez via l'objet qui la possède.
Si vous voyez attentivement, vous devez être conscient que chaque élément n'est pas une instance éloquente et vous pouvez accéder directement à l'attribut attributes . C'est aussi la relation appartient à dans ce cas
Assez juste, mais pourquoi pas? Comment et pourquoi sont-ils convertis en tableaux?
Si je comprends bien, vous voulez pouvoir afficher la clé et la valeur des attributs.
Si vous utilisez Blade, vous pouvez essayer une boucle foreach étendue:
($item->attributes['NAME'] !== null) ? $item->attributes['NAME'] : '';
Cela suppose que vous avez déjà accès aux attributs de chaque modèle individuel, tels que $ item-> email ou dans ce cas $ item-> attributs . Si vous en avez besoin, vous pouvez utiliser @foreach ($ item-> attributes as $ key => $ value) pour le démarrer.
Si vous êtes seulement Si vous cherchez à afficher une valeur spécifique, utilisez l'opérateur null-coalesce ??.
// the fallback does not have to be a string $person = Person::find($id) ?? Person::first(); // it can be chained $value = $parameter ?? $localDefault ?? $globalDefault;
Vous pouvez utiliser ceci dans votre logique ailleurs avec n'importe quelle expression qui peut être nul:
$item->attributes['NAME'] ?? ''
Si le NOM n'est pas trouvé, il reviendra à ce qui vient après le ?? , qui est une chaîne vide dans l'exemple ci-dessus. C'est une bonne astuce pour éviter toute erreur si l'attribut n'existe pas. Il fait la même chose qu'un ternaire vérifiant s'il est nul:
@foreach($attributes as $key => $value)
{{ $key }}: {{ $value }}
@endforeach
C'est évidemment compliqué, donc l'opérateur null-coalesce est pratique!
Ok merci, mais avec cette boucle foreach, tous les attributs sont affichés et je souhaite afficher uniquement NAME. if ($ key == "NAME") {echo $ value; } cette méthode est-elle suffisante? Ou existe-t-il un autre moyen sans utiliser une condition if?
@yagrasdemonde, voir ma modification concernant l'opérateur null-coalesce. Oubliez la boucle foreach et accédez-y directement à l'aide de l'exemple.
D'accord, @GoogleMac m'a mis sur la bonne voie. En fait, l'attribut NAME n'étant pas toujours présent, je dois tester la variable avec une fonction
{{ isset($attributes->NOM) ? $attributes->NAME : 'NC' }}
et non
!== NULL
Avec
isset()
Le code fonctionne très bien.
Merci @GoogleMac et @Davit