Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [laravel]Jak wyświetlić wynik 2 zmiennych laravel
Forum PHP.pl > Forum > PHP > Frameworki
kmpl
Pewnie robię jakiś głupi błąd , ale nie mam już pomysłów. Chcę wyświetlić na stronie głównej wyniki z 2 funkcji z kontrolera.

  1. public function ibm()
  2. {
  3. $ibm= DB::table('computers')
  4. ->where( 'nazwa', 'IBM')->count();
  5.  
  6. return view('welcome', ['ibm'=>$ibm]);
  7.  
  8. }
  9.  
  10.  
  11. public function dell()
  12. {
  13. $dell= DB::table('computers')
  14. ->where( 'nazwa', 'DELL')->count();
  15.  
  16. return view('welcome', ['dell'=>$dell]);
  17.  
  18.  
  19.  
  20. }


Widok:

  1. <php>
  2.  
  3. IBM: <p>{{ $ibm }}</p>
  4. DELL: <p>{{ $dell }}</p>
  5.  
  6. </php>


Strona się wyświetli, ale jak usunę którąś ze zmiennych. Tylko jedna zmienna zadziała np:

$ibm is undefined



Router web.php:

  1. Route::get('welcome','ComputerController@ibm');
  2. Route::get('welcome','ComputerController@dell');
viking
Cytat
DELL: <p>{{ $dell ?? ''}}</p>
i analogicznie drugie.

Ale fatalnie się do tego zabierasz.
kmpl
Ok. Strona już nie wywala błędem. 2 zmienna dell zadziałała, ibm nie ma wyniku.
Pewnie fatalnie się zabieram, ale to pierwsze kroki.
viking
  1. Route::get('welcome/{name}','ComputerController@index');
  2.  
  3. public function getComputerByName(string $name)
  4. {
  5. return DB::table('computers')
  6. ->where( 'nazwa', $name)->count();
  7.  
  8. }
kmpl
Kurcze, nie rozumiem tego kodu....

Funkcja ma policzyć ile w tabeli computers jest komputerów o nazwie np. DELL i wyświetlić na stronie głownej.
Kolejna funkcja ma zrobić podobnie tylko komputery o nazwie IBM.
viking
No i to robi. getComputerByName zwróci dane dla konkretnej nazwy. Dalej przekaż to sobie do widoku. Name masz pod requst->input('name') w kontrolerze. Musisz po prostu poczytać trochę dokumentację. To nawet dobry przykład na użycie komponentów.
kmpl
Nie rozumiem skąd funkcja wie, że ma policzyć z tabeli computers z kolumny 'nazwa' wartość DELL. Nigdzie nie wskazuję, że to ma być DELL czy IBM.
kmpl
Jak rozumiem kod wrzucam do web.php
  1. Route::get('bron/{name}','BronController@index');


a funkcję do kontrolera

  1. public function getComputerByName(string $name)
  2. {
  3.  
  4. return DB::table('computer')
  5. ->where( 'nazwa', $name)->count();
  6.  
  7. }


w widoku:
  1. DELL: {{ $name questionmark.gif ''}}
viking
Jeśli to route webowy. Na razie w sumie nie ma znaczenia gdzie to wrzucisz. Poćwicz podstawy, potem będziesz myślał nad architekturą. Od lv8 routing możesz definiować jako tablicę BronController::class i index. Chociaż pewnie tutaj lepszy byłby invokable controller.
kmpl
Funkcja generalnie działa, ale wyłącznie na świeżym, czystym utworzonym widoku np. list.blade.php.
Jeżeli to samo próbuję wyświetlić w widoku welcome.blade.php to brak wyniku działania funkcji. Czy tu trzeba jakoś przekazać inaczej zmienne?

Kontroler:

  1. public function raport()
  2. {
  3.  
  4. $ibm= DB::table('computers')
  5. ->where('nazwa', 'IBM')->get()->count();
  6. $dell= DB::table('computers')
  7. ->where('nazwa', 'DELL')->get()->count();
  8.  
  9. return view('list', ['ibm' => $ibm, 'dell' => $dell]);
  10. }



list.blade.php

  1. IBM: <p>{{ $ibm questionmark.gif '' }}</p>
  2.  
  3. DELL: <p>{{ $dell questionmark.gif '' }}</p>


web.php

  1. Route::get('list','ComputerController@raport');


Rysh
Nie wołaj bezpośrednio DB:: tylko użyj do tego modelu.

  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Models\Computer;
  6.  
  7. class ComputerController
  8. {
  9. public function index(): void
  10. {
  11.  
  12. $ibm = Computer::query()->where('name', 'IBM')->count();
  13. $dell = Computer::query()->where('name', 'DELL')->count();
  14.  
  15. return view('welcome', compact('ibm', 'dell'));
  16. }
  17. }
  18. ?>


Aczkolwiek najlepszym wyjściem, jest pobranie tego za pomocą jednego zapytania. Gdy dojdzie wiecej modeli, nie będziesz pobierał dla każdego producenta osobno ilość - bo to bez sensu.
LowiczakPL
Twój kod nie działa ponieważ zawiera dwie metody wywołujące ten sam widok który w danym momencie nie ma dostępu do zmiennej z drugiej metody.

Rysh dał Ci przykład że musisz te dwie zmienne mieć w jednej metodzie i przekazać je do widoku który je wyświetli.

Jeśli chcesz zliczyć komputery po nazwie to proponuje je pogrupować po nazwie będziesz miał wtedy jedno zapytanie.

W widoku dasz sobie pętlę pokazującą nazwy i ilości.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.