Problem
Pokušavam iz baze podataka dobiti elokventni model, ali nastavljam ulaziti u njega BadMethodCallExceptionMethod [pronađi]
ne postoji.
Evo što sam do sada pokušao:
App App;koristiti Illuminate \ Database \ Eloquent \ Model;
koristiti App \ Organisation;
klasa Korisnik proširuje Model
/ **
* Tablica baze podataka koju koristi model.
*
* @var niz
* /
zaštićen $ table = 'users';
/ **
* Atributi izuzeti iz JSON obrasca modela.
*
* @var niz
* /
zaštićen $ hidden = array ('lozinka');
organizacije s javnom funkcijom ()
vrati $ this-> pripadaToMany (Organizacija :: klasa);
Ovo je osnovna korisnička klasa koja dolazi uz svaki novi Laravel projekt. Nakon stvaranja novog korisnika, jasno vidim da korisnik s ID3 postoji u bazi podataka. Međutim, kada učinim sljedeće, na kraju završim s Metoda BadMethodCallException [pronađi] ne postoji
javna funkcija getUser ($ id)
$ my_user = Korisnik :: pronađi ($ id);
povratak pogled ('korisnici.indeks ', niz (' korisnik '=> $ moj_korisnik));
Datoteke Rute mojih ruta \ web.php:
Route :: get ('user / id', '[email protected]');Ruta :: get ('/', function ()
return Pogled :: make ('test');
);
Riješenje
Postoji nekoliko problema s ovom implementacijom zbog kojih biste mogli primiti Metoda BadMethodCallException [pronađi] ne postoji
iznimka.
- Trebali biste slijediti najbolje prakse u imenovanju svojih kontrolera kao riječi Model + "Controller", tako da na kraju dobijete UserController umjesto samo User .
- Klasa User na koju se ovdje pozivate zapravo nije povezana s vašim modelom App \ User. Ako ga primijetite, nikada niste izričito uključili svoj model. Dakle, pod pretpostavkom da ste već popravili prethodnu točku, morat ćete uključiti klasuUser u svoj UserController . Tek tada možete izrađivati nove objekte pomoću te klase. Dakle, u svoj UserController idite i dodajte use App \ User; na vrhu. (Primijetite kako sam uključio aplikaciju \ organizaciju)
- Nakon što ste to popravili, trebali biste pokrenuti odlagalište skladatelja -o da biste regenerirali skladatelj.lock datoteku koja će vam ubrzati učitavanje predavanja.
Nakon toga trebali biste moći pristupiti svom App \ User modelu kako ste namjeravali.
Daljnja objašnjenja (samo u obrazovne svrhe)
Kao što znate, web razvoj nikada nije značio biti samostalni show. Općenito možete očekivati suradnju s drugim programerima oko 90% vremena. Da bi projekt bio uspješan, morate biti sigurni da svi slijede opća pravila kodiranja.
Jedno od pravila bit će o konvencijama imenovanja i razumijem da držanje koraka s određenom konvencijom imenovanja zahtijeva puno truda i potencijalno može izgubiti puno vremena tima dok ih svi ne mogu razumjeti i slijediti. To je posebno teško za nove programere koji se pridružuju timu.
Predložio bih vam da pokušate pročitati više tuđih koda prije nego što počnete pisati svoj, samo da biste stekli uvid u najbolje industrijske prakse.
Neka su pravila obavezna, a neka se prepuštaju timu da odluči kako želi pristupiti.
Gledajući problem odozgo, primijetit ćete da bi sve klase trebale biti napisane u StudlyCaps, dakle UserController, a ne user_controller .
I ovo je primjer obveznog pravila koje se treba pridržavati.
Primjer onoga što biste kao tim mogli definirati kao svoje unutarnje pravilo je kako imenujete svoje klase, metode i varijable.
Ako se očekuje da će projekt vremenom rasti, zasigurno možete očekivati mnogo različitih entiteta koji na ovaj ili onaj način uključuju korisnika, tako da je važno da za svoje klase, metode i varijable ne izmišljate nejasna imena.
Moj osobni savjet ovdje je; ne bojte se imati duži razred ili naziv metode. Ako trebate imati komentar koji objašnjava vašu metodu, tada naziv vaše metode vjerojatno može biti bolji.
Primjer toga je da ako trebate dobiti korisnike iz baze podataka s nekim dodatnim uvjetom, možda su to korisnici stariji od 50 godina, tada nemojte imenovati svoju metodu getUsers . Bolji način imenovanja je getAllUsersOver50YearsOld .