J'utilise cette fonction: $ assets-> pluck ('url')
.
Il renvoie: ['link', 'link1', 'link2']
Comment le convertir en: [{url: 'link'}, {url: 'link1'}, {url: 'link2'}]
3 Réponses :
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();
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
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']);
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();
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