Syndrom 95 Zgłoś post Napisano Styczeń 19, 2017 (edytowany) Mam problem z metodą where() dla kolekcji: foreach ($offers as $offer) { $col = $offerstats->where('id',$offer->id); if (!$col->isEmpty()) { Log::error($col); (.....) Pierwszy wynik zwraca mi zawsze z "1" cokolwiek to znaczy: [2017-01-19 01:44:25] local.ERROR: {"1":{"id":"3275042","do":"3","cena":"4.35","szt":"1"}} [2017-01-19 01:44:25] local.ERROR: [{"id":"3082727","do":"3","cena":"5.55","szt":"1"}] Dlaczego tak się dzieje? Wersja 5.0.27 Edytowano Styczeń 19, 2017 przez Syndrom (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Pan Kot 1535 Zgłoś post Napisano Styczeń 19, 2017 Nie zwraca Ci 1, tylko kolekcję klucz-wartość, gdzie wartością jest wynik zapytania, a kluczem counter. Jak nie wiesz o co tutaj chodzi to sprawdź za co odpowiada parametr resulttype w funkcji mysqli_fetch_array. Udostępnij ten post Link to postu Udostępnij na innych stronach
Syndrom 95 Zgłoś post Napisano Styczeń 19, 2017 No dobrze, ale czemu tylko w jednym przypadku? Mam 4 kolekcję w $offers. 1 pusty wynik, 2 zwraca kolekcje, 3 pusty wynik, 4 inna kolekcja Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość l3szcz Zgłoś post Napisano Styczeń 19, 2017 Log::error($col); Dlatego wyświetla Ci error a nie kolekcję taką jaką powinno. Daj return / echo i będzie Ci zwracać. Jeżeli zaś chciałbyś zwrócić błąd w wypadku pustej kolekcji odwróć warunek czyli daj: if($col->isEmpty()) return false / null / 0; /* Jakikolwiek zwrot, który da skryptowi do myślenia, że ma do czynienia z pustą kolekcją - zazwyczaj false dzięki czemu łatwiej obsłużysz wątek. Udostępnij ten post Link to postu Udostępnij na innych stronach
Syndrom 95 Zgłoś post Napisano Styczeń 19, 2017 (edytowany) Log::error mam po to by debugować co mi zwróciło. Tak samo odwrócenia ifa to nie jest rozwiązanie problemu, jeśli w kolekcji skądś się bierze ta "1" na początku pierwszej pętli. Dodam tylko, że jak robię where tylko po tym polu to przy 1 zwrocie mam ta jedynkę. Jak robię where po każdym innym polu to jest ok: [2017-01-19 17:24:35] local.ERROR: [{"id":"30","do":"3","cena":"5.55","szt":"1"}] [2017-01-19 17:24:35] local.ERROR: [{"id":"31","do":"3","cena":"5.55","szt":"1"}] To może w ogóle mam zły algorytm. Mam kolekcję $offer (30 elementów) oraz kolekcję $offerstats (2 elementy) i teraz chcę zrobić iterację po elementach z $offer i jeśli znajdzie dane ID w $offerstats to ma pobrać dla kilka danych z offerstats dla tego ID. Edytowano Styczeń 19, 2017 przez Syndrom (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość l3szcz Zgłoś post Napisano Styczeń 21, 2017 Czyli inaczej chcesz połączyć powiedzmy 2 tabele ze sobą. Polecam zastosowanie JOINa o ile korzystasz z baz danych (na co wygląda) $this->query ->leftJoin("offerstats", "offers.id", "=", "offerstats.id") // więcej tu: http://www.w3schools.com/sql/sql_join_left.asp i tu: https://laravel.com/docs/5.3/queries#joins ->select("offerstats.id", "offer.id" .....) // tu wpisujemy oczywiście kolumny do pobrania. ->get(); Ten kod wskaże tylko te pozycje, które są konkretnie w bazie, dla konkretnego IDka z offers będzie wskazana kolekcja z danymi w offerstats. Powodzenia Udostępnij ten post Link to postu Udostępnij na innych stronach
Syndrom 95 Zgłoś post Napisano Styczeń 21, 2017 Nie wiem dlaczego ale to rozwiązało problem: $col = $offerstats->where('id',$offer->id)->first(); Udostępnij ten post Link to postu Udostępnij na innych stronach