J'essaie de fusionner plusieurs objets (comme des reçus, des rapports, etc.) avec ceci est le résultat: p> La capture d'écran ci-dessus montre deux éléments, mais le troisième élément est manquant car il a le même identifiant (ID: "1") comme le premier. Ce que j'essaie d'atteindre est de les afficher les trois comme une collection. p> J'ai besoin du résultat pour être des objets (collection) parce que j'utilise également le code sur ma vue, où je vérifie la classe pour déterminer quoi afficher. En outre, j'utilise cette fonction pour trier les objets de la collection. p> Collection-> Fusion () Code>.
p>
4 Réponses :
Vous pouvez mettre toutes les collections dans un tableau et utiliser ceci. Dépend de ce que vous voulez faire avec la collection.
$list = array(); $list = array_merge($list, Receipt::all()->toArray()); $list = array_merge($list, Report::all()->toArray());
S'il vous plaît voir mon édition. J'ai également essayé cela, mais j'ai besoin que les résultats soient des objets éloquents.
Je sais que c'est une question ancienne, mais je vais toujours fournir la réponse au cas où quelqu'un viendra ici de la recherche comme je l'ai fait.
Si vous essayez de fusionner deux collections éloquentes différentes en un et certains objets se produisent Pour avoir le même identifiant, on écrasera l'autre. Je ne sais pas pourquoi cela fait cela et si c'est un bogue ou une fonctionnalité - plus de recherches nécessaires. Pour résoudre ce problème, utilisez la méthode push () à la place ou repenser votre approche du problème pour éviter cela. P>
Exemple d'un problème: P>
$collection = collect();
$cars = Car::all();
$bikes = Bike::all();
foreach ($cars as $car)
$collection->push($car);
foreach ($bikes as $bike)
$collection->push($bike);
Je sais que je chante un fil de 4 ans, mais je suis tombé sur ceci et aucune des réponses n'était ce que je cherchais; Donc, comme @tadas, je laisserai ma réponse pour les personnes qui vont rencontrer ceci. Après avoir regardé la documentation Laravel 5.5 à fond, j'ai découvert que Concat était le go-to méthode.
Donc, dans le cas de l'OP, la solution correcte serait la suivante: de cette façon chaque élément em> de la collection de rapports sera ajouté à tous les em> élément de la collection de recettes, événement si certains champs sont identiques. P> Finalement, vous pourriez le mélanger pour obtenir un résultat d'appel plus visuel pour par exemple une vue: p>
Une autre façon d'y aller est de convertir l'une de vos collections en une collection de base avec Méthode Définition: EM> P> illuminate \ prise \ Collection \ Collection code> $receipts = Receipt::all();
$reports = Report::all();
$collection = $receipts->toBase()->merge($reports);
Merci pour cela; J'ai passé des siècles à essayer de déboguer et votre réponse m'a fait comprendre que je n'avais pas eu affaire à une collection standard, mais en fait une collection éloquente.
Il n'y a aucune raison pour que cette fusion ne fonctionne pas. La collecte n'est pas dépendante de l'une des propriétés des articles. Sous la hotte
fusion () code> est juste unarray_merge code> d'éléments arrablables. Comment l'objet de rapport a-t-il l'air?