[PHP][Laravel]Zsumowanie wartości z tablic |
[PHP][Laravel]Zsumowanie wartości z tablic |
26.05.2019, 18:45:36
Post
#1
|
|
Grupa: Zarejestrowani Postów: 224 Pomógł: 0 Dołączył: 31.10.2012 Ostrzeżenie: (10%) |
Mam następującą kolekcję z tablicami tak jak w poniższym kodzie. Próbuję uzyskać sumę wartości price ze wszystkich zwróconych tablic. Próbowałem zrobić to na kilka sposobów jednak za każdym razem otrzymuję błąd. Czy ktoś mógłby podpowiedzieć mi jak mogę uzyskać zamierzony efekt?
|
|
|
26.05.2019, 19:23:27
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Kod var_dump($order->sum('price')); Dokumentacja nie gryzie https://laravel.com/docs/5.8/collections#method-sum |
|
|
26.05.2019, 20:05:19
Post
#3
|
|
Grupa: Zarejestrowani Postów: 224 Pomógł: 0 Dołączył: 31.10.2012 Ostrzeżenie: (10%) |
@Pyton_000
Niestety, użycie tej metody wyrzuca błąd - Call to a member function sum() on array.
|
|
|
26.05.2019, 20:11:57
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Czym jest $order ?
|
|
|
26.05.2019, 20:28:41
Post
#5
|
|
Grupa: Zarejestrowani Postów: 224 Pomógł: 0 Dołączył: 31.10.2012 Ostrzeżenie: (10%) |
$order stanowi wynik z zapytania - Order::with('product')->where('id', $id)->get();
Jak widać jest to złożona struktura, dlatego spróbowałem ją uprościć stosując array column. Ten post edytował Generic 26.05.2019, 20:29:01 |
|
|
26.05.2019, 20:34:34
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
$order->product->sum('price');
|
|
|
26.05.2019, 20:50:14
Post
#7
|
|
Grupa: Zarejestrowani Postów: 224 Pomógł: 0 Dołączył: 31.10.2012 Ostrzeżenie: (10%) |
Niestety zwraca błąd Property [product] does not exist on this collection instance. Wydaję mi się, że nie można w tym przypadku bezpośrednio odwołać się do product.
|
|
|
26.05.2019, 22:00:02
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
zamień product na nazwę metody która odwołuje się do relacji oneToMany w modelu Order (ale bez nawiasów)
|
|
|
27.05.2019, 00:13:11
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Abo utworzyć w modelu Order metodę getSummary() i w niej.
Ale wcześniej struktura do poprawy. Co to jest product? Zamówienie może mieć tylko tylko jeden, że w liczbie pojedynczej? I jak to się ma do produktów w systemie? To powinna być tabela typu pivot łącząca katalog produktów, z produktem w zamówieniu. -------------------- |
|
|
27.05.2019, 05:28:12
Post
#10
|
|
Grupa: Zarejestrowani Postów: 224 Pomógł: 0 Dołączył: 31.10.2012 Ostrzeżenie: (10%) |
|
|
|
28.05.2019, 07:50:01
Post
#11
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Chyba model?
Bez sensu nazwa, bo Order to Zamówienie więc główny obiekt, a do niego powinno być coś w stylu HasMany - OrderItem lub OrderProduct. -------------------- |
|
|
2.06.2019, 15:43:28
Post
#12
|
|
Grupa: Zarejestrowani Postów: 224 Pomógł: 0 Dołączył: 31.10.2012 Ostrzeżenie: (10%) |
Struktura mojej bazy wygląda następująco:
Cart table (przechowuje informacje o zamówieniu): id user_id shipping_id Order table (przechowuje zamówione przedmioty): id user_id product_id quantity User table (przechowuje dane klienta); id name surname etc. Dla tabeli Cart utworzyłem relację Belongs to user z kluczem obcym user_id. Tabela Order zawiera relację Belongs to products z kluczem product_id. Struktura działa gdyż jestem w stanie pętlą foreach zwrócić zamówione przedmioty i dane klienta. Mam jednak problem ze zwróceniem wartości całego zamówienia. Okey, dodałem zmienną:
Działa tak jak tego oczekiwałem, jednak myślałem o tym by te informacje pochodziły z pierwotnego zapytania (tak jak poniżej), aby nie tworzyć nowego skoro są zawarte w jednym.
Ten post edytował Generic 2.06.2019, 15:44:28 |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 04:29 |