Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [laravel]Jak wyświetlić wynik 2 zmiennych laravel
kmpl
post 29.11.2020, 10:15:23
Post #1





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 4.06.2006

Ostrzeżenie: (0%)
-----


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');


Ten post edytował kmpl 29.11.2020, 10:27:33
Go to the top of the page
+Quote Post
viking
post 29.11.2020, 11:04:35
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Cytat
DELL: <p>{{ $dell ?? ''}}</p>
i analogicznie drugie.

Ale fatalnie się do tego zabierasz.

Ten post edytował viking 29.11.2020, 11:04:51


--------------------
Go to the top of the page
+Quote Post
kmpl
post 29.11.2020, 11:51:36
Post #3





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 4.06.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
viking
post 29.11.2020, 15:47:43
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
kmpl
post 29.11.2020, 16:31:15
Post #5





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 4.06.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
viking
post 29.11.2020, 16:40:16
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
kmpl
post 29.11.2020, 17:17:50
Post #7





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 4.06.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
viking
post 29.11.2020, 17:39:43
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://laravel.com/docs/8.x/routing#route-parameters


--------------------
Go to the top of the page
+Quote Post
kmpl
post 29.11.2020, 18:47:27
Post #9





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 4.06.2006

Ostrzeżenie: (0%)
-----


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 ''}}
Go to the top of the page
+Quote Post
viking
post 29.11.2020, 19:06:03
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
kmpl
post 2.12.2020, 11:13:40
Post #11





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 4.06.2006

Ostrzeżenie: (0%)
-----


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');


Go to the top of the page
+Quote Post
Rysh
post 23.12.2020, 08:06:45
Post #12





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Rysh 23.12.2020, 08:08:41


--------------------
Go to the top of the page
+Quote Post
LowiczakPL
post 30.12.2020, 06:02:09
Post #13





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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.


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 20:41