Problem
Jeg har prøvd å få en veltalende modell fra databasen, men fortsetter å komme inn på det BadMethodCallExceptionMethod [finn]
eksisterer ikke.
Dette er hva jeg har prøvd så langt:
navneområdet App;bruk Illuminate \ Database \ Eloquent \ Model;
bruk App \ Organization;
klasse bruker utvider modell
/ **
* Databastabellen som brukes av modellen.
*
* @var streng
* /
beskyttet $ table = 'brukere';
/ **
* Attributtene ekskludert fra modellens JSON-skjema.
*
* @var matrise
* /
beskyttet $ skjult = matrise ('passord');
offentlige funksjonsorganisasjoner ()
returner $ dette-> belongToMany (Organisasjon :: klasse);
Dette er en grunnleggende brukerklasse som følger med hvert nye Laravel-prosjekt. Etter å ha opprettet en ny bruker, kan jeg tydelig se at bruker med ID3 finnes i databasen. Imidlertid når jeg gjør følgende, ender jeg opp med BadMethodCallException Method [find] finnes ikke
offentlig funksjon getUser ($ id)
$ my_user = Bruker :: finn ($ id);
return view ('brukere.indeks ', matrise (' bruker '=> $ my_user));
Mine ruter filruter \ web.php:
Rute :: get ('bruker / id', '[e-postbeskyttet]');Rute :: get ('/', funksjon ()
return View :: make ('test');
);
Løsning
Det er noen problemer med denne implementeringen som kan føre til at du mottar BadMethodCallException Method [find] finnes ikke
unntak.
- Du bør følge de beste fremgangsmåtene for å navngi kontrollerne dine som Model + "Controller" -ordet, slik at du ender opp med en UserController i stedet for bare en bruker .
- Brukerklassen du refererer til her, er egentlig ikke relatert til din App \ User-modell. Hvis du merker det, har du aldri eksplisitt tatt med modellen din. Så forutsatt at du allerede har løst det forrige punktet, må du ta med brukerklassen i UserController . Først da kan du lage nye objekter ved hjelp av den klassen. Så i din UserController gå og legg til bruk App \ User; på toppen. (Legg merke til hvordan jeg inkluderte App \ Organization)
- Når du har løst det, bør du kjøre komponist dump -o for å regenerere komponisten.låsefil som vil bidra til å øke belastningen på klassene dine.
Etter å ha gjort det, bør du kunne få tilgang til App \ User-modellen din slik du hadde tenkt deg.
Ytterligere forklaring (kun for pedagogiske formål)
Som du vet har nettutvikling aldri ment å være et enmanns show. Du kan generelt forvente å samarbeide med andre utviklere omtrent 90% av tiden. For at prosjektet skal lykkes, må du sørge for at alle følger generelle kodingsregler.
På reglene vil det dreie seg om å navngi konvensjoner, og jeg forstår at å holde tritt med en bestemt navnekonvensjon krever mye innsats og potensielt kan kaste bort mye av teamets tid til alle kan forstå og følge dem. Dette er spesielt tøft for nye utviklere som kommer til teamet.
Jeg vil foreslå at du prøver å lese mer av andres kode før du begynner å skrive din, bare for å få en følelse av de beste bransjepraksisene.
Noen regler er obligatoriske, og noen overlates til teamet å bestemme hvordan de vil tilnærme seg.
Når du ser på problemet ovenfra, vil du legge merke til at alle klassene skal skrives i en StudlyCaps, så UserController og ikke user_controller .
Og dette er et eksempel på en obligatorisk regel å følge.
Nå, et eksempel på hva du som et team kan definere som din interne regel, er hvordan du navngir klassene, metodene og variablene.
Hvis det forventes at et prosjekt vil vokse over tid, kan du absolutt forvente mange forskjellige enheter som på en eller annen måte inkluderer en bruker, så det er viktig at du ikke kommer med vage navn for klassene dine, metodene og variablene.
Mitt personlige tips her er; ikke vær redd for å ha en lengre klasse eller et metodenavn. Hvis du trenger å ha en kommentar som forklarer metoden din, kan sannsynligvis metodens navn være bedre.
Et eksempel på dette er at hvis du trenger å hente brukere fra en database med noen tilleggsvilkår, er det kanskje brukere over 50 år, så ikke navngi metoden din getUsers . En bedre måte å gi den navn er getAllUsersOver50YearsOld .