Skocz do zawartości
Zaloguj się, aby obserwować  
Syndrom

laravel - problem z kolekcją

Polecane posty

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 przez Syndrom (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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
            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

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 przez Syndrom (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość l3szcz

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

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×