1
votes

Les collections Laravel convertissent la valeur de la clé en tableau d'assoc clé

J'utilise cette fonction: $ assets-> pluck ('url') .

Il renvoie: ['link', 'link1', 'link2']

Comment le convertir en: [{url: 'link'}, {url: 'link1'}, {url: 'link2'}]


5 commentaires

Votre collection est-elle issue d'une requête effectuée sur un modèle?


C'est venu d'une relation


Pouvez-vous montrer le code comment vous avez obtenu $ assets ?


Oui, $ assets = auth () -> user () -> assets;


Je fournis du code ci-dessous


3 Réponses :


2
votes

Vous pouvez ajouter des fonctions à la requête de relation pour ne renvoyer que le champ url . De cette façon, vous obtiendrez le résultat souhaité.

$assets = auth()->user()->assets()->select('url')->get();


3 commentaires

Cool, mais dans mon cas, je pense qu'un ?? magique ?? la méthode de collecte serait plus appropriée. Et juste à mon avis, les collections sont assez mal documentées et il y a probablement un moyen de le faire


Pourquoi une méthode de collecte serait-elle meilleure? Vous allez récupérer plus de données de la base de données et filtrer en mémoire?


Non, à cause de ce que le contrôleur est conçu pour faire - principalement pour récupérer des données. J'ai un frontend de vue qui nécessite une liste d'url fournie par laravel



0
votes

Pour renvoyer une collection contenant uniquement certains champs du modèle, vous pouvez ajouter un tableau de liste de champs à récupérer en tant que paramètres de la méthode get sur votre modèle

ModelName::where([...])->select('id', 'url')->get();

ou en passant une liste de champs comme paramètre à la méthode select

ModelName::get(['id', 'url']);


0 commentaires

1
votes

Vous pouvez utiliser la méthode de collecte -> only () pour spécifier les champs que vous souhaitez renvoyer:

$assets = auth()->user()
    ->assets
    ->only(['url'])
    ->all();


0 commentaires