Double record (from pivot table)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stijn Vanderkimpen

Stijn Vanderkimpen

20/10/2016 17:14:40
Quote Anchor link
Hello

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

Afbeelding

De database ziet er zo uit (product_id => 411)

Afbeelding

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:

Afbeelding

Wie kan mij hier helpen of doorverwijzen?

Thanks!
 
PHP hulp

PHP hulp

14/03/2025 04:05:10
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/10/2016 18:18:55
Quote Anchor link
Je moet dit oplossen met een eigen query. Ik ben niet zo goed op de hoogte met Lavarel, wel met Symfony.

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)
 
Pg Vincent

Pg Vincent

21/10/2016 09:36:49
Quote Anchor link
Hebben de gekozen opties invloed op de prijs?

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.