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.
public function ibm() { $ibm= DB::table('computers') ->where( 'nazwa', 'IBM')->count(); return view('welcome', ['ibm'=>$ibm]); } public function dell() { $dell= DB::table('computers') ->where( 'nazwa', 'DELL')->count(); return view('welcome', ['dell'=>$dell]); }
<php> IBM: <p>{{ $ibm }}</p> DELL: <p>{{ $dell }}</p> </php>
Route::get('welcome','ComputerController@ibm'); Route::get('welcome','ComputerController@dell');
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.
Route::get('welcome/{name}','ComputerController@index'); public function getComputerByName(string $name) { return DB::table('computers') ->where( 'nazwa', $name)->count(); }
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.
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.
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.
https://laravel.com/docs/8.x/routing#route-parameters
Jak rozumiem kod wrzucam do web.php
Route::get('bron/{name}','BronController@index');
public function getComputerByName(string $name) { return DB::table('computer') ->where( 'nazwa', $name)->count(); }
DELL: {{ $name ''}}
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.
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:
public function raport() { $ibm= DB::table('computers') ->where('nazwa', 'IBM')->get()->count(); $dell= DB::table('computers') ->where('nazwa', 'DELL')->get()->count(); return view('list', ['ibm' => $ibm, 'dell' => $dell]); }
IBM: <p>{{ $ibm '' }}</p> DELL: <p>{{ $dell '' }}</p>
Route::get('list','ComputerController@raport');
Nie wołaj bezpośrednio DB:: tylko użyj do tego modelu.
<?php namespace App\Http\Controllers; use App\Models\Computer; class ComputerController { public function index(): void { $ibm = Computer::query()->where('name', 'IBM')->count(); $dell = Computer::query()->where('name', 'DELL')->count(); return view('welcome', http://www.php.net/compact('ibm', 'dell')); } } ?>
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.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)