[inny] Laravel, problem z orm |
[inny] Laravel, problem z orm |
4.11.2017, 21:54:41
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 4.11.2017 Ostrzeżenie: (0%) |
Witam,
Potrzebuję za pomocą jednej kwerendy pobrać dwie sumy kolumn i wszystkie kolumny zarazem.
W zmiennej $test siedzi object:
Muszę zsumować f_amount_c i f_amount_unit jak i mieć dostęp do wszystkich kolumn, jak mogę to zrobić w ORM zamiast robić pętle i zliczać? Proszę o pomoc. |
|
|
5.11.2017, 03:21:13
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
https://laravel.com/docs/5.5/collections#method-sum choć nie wykluczam, że tam mają miejsce pętle jeżeli mówimy o optymalności.
Po stronie zapytania do bazy raczej będzie ciężko zsumować czystym Eloquent'em, na pewno by dało radę coś JOINować i się bawić ale czasem mega wygodnie skorzystać z metod Collections. -------------------- |
|
|
7.11.2017, 15:07:28
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 4.11.2017 Ostrzeżenie: (0%) |
Dziekuje, pomogło.
Mam jeszcze jedno pytanko, mam 3 tabele strukturą się nie różnią jedynie danymi i typem tych danych. Każda tabela ma user_id, chcę wybrać wszystkie rekordy z tych tabel gdzie user_id = 1 da się tak? Potrzebuję tablicę z rekordami z tych trzech tabel za pomocą ORM, mam modele do tych tabel lecz nie wiem jak to połaczyć. Prosze o pomoc. |
|
|
7.11.2017, 15:22:41
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
a czemu utrudniasz sobie życie robiąc 3 tabele zamiast 1?
|
|
|
7.11.2017, 15:28:04
Post
#5
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 4.11.2017 Ostrzeżenie: (0%) |
Muszę zrobić pewien mechanizm w istniejacym już projekcie, nie mam możliwości to połaczyć fizycznie.
|
|
|
7.11.2017, 15:49:26
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
użyj relacji oneToMany w users i pobieraj używając lazyLoad np:
$user = App\User::with(['user_tab1', 'user_tab2', 'user_tab3'])->get(); A potem zrobić merge tych danych. https://laravel.com/docs/5.5/eloquent-relat...ips#one-to-many https://laravel.com/docs/5.5/eloquent-relat...s#eager-loading Ten post edytował Pyton_000 7.11.2017, 15:49:43 |
|
|
9.11.2017, 19:57:57
Post
#7
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 4.11.2017 Ostrzeżenie: (0%) |
Ostatnie już pytanie,
Pobieram do trzech zmiennych dane przez orm, następnie dodaje poprzez ->map index "type" za pomocą (nie pytajcie, projektant bazy zawinił, rozdzielił dane na 3 tabele zamiast dać kolumnę "type"), następnie te 3 obiekty łącze poprzez array_merge(....) i sortuję funkcją sort według daty. Czy to jest dobre rozwiązanie takiego problemu? Można to jakoś zoptymalizać? Głównie chodzi abym w blade miał w jednej zmiennej dane z tych 3 tabel które łącze i dodaje ręcznie index w tablicy "type" i nadaje go ręcznie. |
|
|
9.11.2017, 20:22:00
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
W sumie jeśli często potrzebujesz to wszystko w 1 to dobre rozwiązanie też: https://stackoverflow.com/questions/2418406...-reltationships
Tylko tam zamiast merge() użyć push(). No i jeśli się da to cache. |
|
|
9.11.2017, 20:59:38
Post
#9
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 4.11.2017 Ostrzeżenie: (0%) |
Hmm, chyba nie ma sensu to tak robić bo pobierać po 2 kolumny z każdej tabeli i używam tych danych tylko raz do historii konta.
|
|
|
9.11.2017, 21:02:55
Post
#10
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Aha, no to nie ma problemu, możesz olać optymalizację jesli twoje działa w miarę optymalnie.
|
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 03:43 |