Double record (from pivot table)
Ik maak gebruik van het laravel Framework bij het maken van mijn webshop.
Een laatste stap die ik nog moet realiseren is het tonen van de aangekochte producten voor een gebruiker.
Jammer genoeg zit hier nog een fout waarvan ik de oplossing niet kan vinden.
Volgende foto toont mijn product 2 maal terwijl dit eenzelfde product moet zijn met 2 opties:
- Kleur: Blauw
- Maat: S
De database ziet er zo uit (product_id => 411)
De laatste 2 regels zouden eigenlijk samen moeten komen.
Voor de mensen die reeds werken met Laravel zal dit vrij eenvoudig zijn!
Ik haal mijn data als volgt op:
//Afhankelijk van mijn product_id krijg ik de gerelateerde producten
$order = Order::with('products')->find($id);
Ik doe een foreach om mijn data te tonen:
@foreach($order->products as $product)
{{ $product->name}}
@endforeach
Vrij logisch dat dit 2 maal voorkomt natuurlijk, maar hoe kan ik dit oplossen?
Nog een dump van mijn data uit de database:
Wie kan mij hier helpen of doorverwijzen?
Thanks!
Laravel heeft een querybuilder, zie https://laravel.com/docs/5.3/queries.
In sql gesproken kun je dan een GROUP BY toepassen. iets als
SELECT * FROM orders WHERE id=$order_id GROUP BY article_number
(article_number is de derde kolom op je afbeelding maar ik weet niet hoe deze heet in je database)
Ik denk dat het een stuk eenvoudiger is om dit in PHP code te doen. Als je het in de database doet dan moet je alle opties platslaan tot een string die je vervolgens in PHP weer uit elkaar moet halen om hem te printen in de stijl van de site.
In PostgreSQL zou ik de database gewoon een JSON string laten uitpoepen maar MySQL kan dat niet.
Dus gewoon in je foreach lus kijken naar het product-id en elk product kopieren naar een nieuwe array. Komt het product al voor in de nieuwe array, van voeg je alleen de opties toe aan het bestaande element.
En natuurlijk: het gaat om een handjevol producten, er is *NIETS* op tegen om de opties gewoon per product met een aparte query op te halen.