• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Laravel 7. Zapytanie zwracające ilość rekordów z tabeli.

Object Storage Arubacloud
0 głosów
685 wizyt
pytanie zadane 9 listopada 2020 w PHP przez kmpl500 Nowicjusz (170 p.)

Witam.

Zrobiłem w laravel 7 prostą aplikację do ewidencji komputerów. Mam 3 tabele: osoby, komputery, magazyn.

Chciałbym na stronie głównej w widoku wyświetlić ilość osób w systemie (z tabeli osoby), ilość komputerów (suma rekordów z tabeli komputery). W tabeli magazyn mam osoby z przypisanymi komputerami.

Nie wiem jak stworzyć funkcję w modelu Osoby. Czy za pomocą count()?

Kod modelu:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Osoba extends Model
{
    protected $fillable = [
        'tytul', 'imie', 'imieojca', 'nazwisko'
    ];

    public function magazyn()
    {
        return $this->hasOne('App\Magazyn');
    }
}

1 odpowiedź

+1 głos
odpowiedź 9 listopada 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 9 listopada 2020 przez kmpl500
 
Najlepsza

Generalnie nie potrzebujesz robić nic w modelu, możesz od razu w kontrolerze (czy gdzie tam potrzebujesz tego użyć) zrobić Osoba::count().

komentarz 9 listopada 2020 przez kmpl500 Nowicjusz (170 p.)
Ok, w kontrolerze. Tylko nie wiem jaką konstrukcję powinno mieć takie zapytanie . Czytałem dokumentację, ale nic mi nie wychodzi.
komentarz 9 listopada 2020 przez Ehlert Ekspert (212,790 p.)

@Arkadiusz Waluk, 

Generalnie nie potrzebujesz robić nic w modelu, możesz od razu w kontrolerze (czy gdzie tam potrzebujesz tego użyć) zrobić

Gdyby to nie była Larva kłóciłbym się.

komentarz 9 listopada 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
No tak jak napisałem, dokładnie: Osoba::count();

Otrzymasz z tego liczbę rekordów w tabeli powiązanej z danym modelem. Nic więcej, zapytanie samo się wygeneruje "pod spodem", wyśle do bazy, obsłuży odpowiedź i zwróci wynik jako liczbę.

@Ehlert, w sensie? Co do użycia w kontrolerze, robienia w modelu czy czego?
komentarz 9 listopada 2020 przez kmpl500 Nowicjusz (170 p.)

Stworzyłem akurat w modelu funkcję jak poniżej, ale zlicza mi tylko ilość osób na stronie uwzględniając paginację (nie zlicza wszystkich osób z tabeli).

public function count()
{
    $osoba = Osoba::all();
   return view('osoba', compact('osoby'));
}

 

W widoku:

{{ $osoba->count() }}

 

komentarz 9 listopada 2020 przez Ehlert Ekspert (212,790 p.)

Robienia takich operacji bezpośrednio w kontrolerze. Ale to larva, która ma swoje podejście. wink

komentarz 9 listopada 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

@kmpl500, przeczytałeś, co napisałem w 2 poprzednich wypowiedziach? ;) Bo ja jedno, a Ty drugie.

Pisałem, abyś zrobił Osoba::count() jeśli chcesz tylko po prostu dostać liczbę wszystkich rekordów. Tu robisz w widoku $osoba->count(), gdzie z kontrolera przekazujesz zmienną osoby, której w ogóle tam z resztą nie ma (deklarujesz $osoba, w compact masz osoby). Ponadto, niepotrzebne jest robienie all() na modelu tylko po to, aby zrobić później count(). Chyba że chcesz też wyświetlić te rekordy czy robić z nimi coś innego. Jeśli tylko pokazać liczbę to sensowniej zrobić samo count(), bo jak dasz najpierw all() to wszystkie dane zostaną wyciągnięte z bazy i na nich będzie zrobione liczenie po stronie PHP, a jak dasz samo count() to do bazy pójdzie zapytanie aby ona policzyła i zwróciła tyko liczbę rekordów.

Tak więc, jeżeli chcesz tylko policzyć wszystkie rekordy modelu Osoba to w kontrolerze możesz zrobić coś typu:

public function count()
{
    $osoby = Osoba::count();
    return view('osoba', compact('osoby'));
}

a na widoku:

{{ $osoby }}

i to powinno zadziałać. Tak przy okazji to polecałbym zmienić wszędzie nazewnictwo na angielskie, to taki standard.

@Ehlert ok, no to zgoda, ale raz że to Laravel, a dwa że czasem jak to jest jedna jedyna mała rzecz (np. zrobienie samego count() i przekazanie do widoku) i prosty kod to osobiście uznaję że to nie jest wielki problem.

1
komentarz 9 listopada 2020 przez kmpl500 Nowicjusz (170 p.)

Wielkie dzięki. Wszystko działa jak należy smiley

Podobne pytania

+1 głos
1 odpowiedź 108 wizyt
0 głosów
2 odpowiedzi 371 wizyt
pytanie zadane 11 grudnia 2017 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
1 odpowiedź 149 wizyt
pytanie zadane 24 maja 2017 w PHP przez chmod96 Obywatel (1,380 p.)

92,620 zapytań

141,473 odpowiedzi

319,809 komentarzy

62,003 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...