Problem
Jag har försökt få en Eloquent-modell från databasen men fortsätter att komma in BadMethodCallExceptionMethod [hitta]
existerar inte.
Här är vad jag försökt hittills:
namnrymd-app;använd Illuminate \ Database \ Eloquent \ Model;
använd App \ Organisation;
klass Användare utökar modell
/ **
* Databastabellen som används av modellen.
*
* @var sträng
* /
skyddad $ table = 'användare';
/ **
* Attributen som utesluts från modellens JSON-formulär.
*
* @var array
* /
skyddad $ dold = array ('lösenord');
offentliga funktionsorganisationer ()
returnera $ this-> belongToMany (Organisation :: klass);
Detta är en grundläggande användarklass som kommer med varje nytt Laravel-projekt. Efter att ha skapat en ny användare kan jag tydligt se att användare med ID3 finns i databasen. Men när jag gör följande slutar jag med BadMethodCallException Method [find] finns inte
offentlig funktion getUser ($ id)
$ my_user = Användare :: hitta ($ id);
returvy ('användare.index ', array (' user '=> $ my_user));
Mina rutter filrutter \ webb.php:
Rutt :: get ('user / id', '[email protected]');Rutt :: get ('/', funktion ()
return View :: make ('test');
);
Lösning
Det finns några problem med denna implementering som kan få dig att få BadMethodCallException Method [find] finns inte
undantag.
- Du bör följa de bästa metoderna för att namnge dina styrenheter som ditt Model + "Controller" -ord så att du får en UserController istället för bara en användare .
- Användarklassen som du hänvisar till här är faktiskt inte relaterad till din App \ User-modell. Om du märker det inkluderade du aldrig din modell uttryckligen. Så förutsatt att du redan har fixat föregående punkt, måste du inkludera klassen Användare i din UserController . Först då kan du skapa nya objekt med den klassen. Så i din UserController gå och lägg till använd App \ User; på toppen. (Lägg märke till hur jag inkluderade App \ Organization)
- När du har fixat det ska du köra kompositör dump -o för att återskapa kompositör.låsfil som hjälper till att påskynda laddningen av dina klasser.
När du har gjort det bör du kunna komma åt din App \ User-modell som du tänkt dig.
Ytterligare förklaring (endast för utbildningsändamål)
Som ni vet har webbutveckling aldrig betydt att vara en enmansshow. Du kan i allmänhet förvänta dig att samarbeta med andra utvecklare cirka 90% av tiden. För att projektet ska lyckas måste du se till att alla följer allmänna kodningsregler.
På reglerna kommer det att handla om namngivningskonventioner och jag förstår att det är mycket ansträngning att följa en bestämd namngivningskonvention och potentiellt kan slösa bort mycket av lagets tid tills alla kan förstå och följa dem. Detta är särskilt tufft för nya utvecklare som går med i teamet.
Jag föreslår att du försöker läsa mer av andras kod innan du börjar skriva din, bara för att få en känsla av de bästa branschpraxis.
Vissa regler är obligatoriska och andra lämnas upp till laget för att bestämma hur de vill närma sig.
Om du tittar på frågan ovan kommer du att märka att alla klasser ska skrivas i en StudlyCaps, så UserController och inte user_controller .
Och detta är ett exempel på en obligatorisk regel att följa.
Nu är ett exempel på vad du som team kan definiera som din interna regel hur du namnge dina klasser, metoder och variabler.
Om det förväntas att ett projekt växer över tiden kan du förvänta dig många olika enheter som på ett eller annat sätt innehåller en användare så det är viktigt att du inte kommer med vaga namn för dina klasser, metoder och variabler.
Mitt personliga tips här är; var inte rädd för att ha en längre klass eller ett metodnamn. Om du behöver ha en kommentar som förklarar din metod kan ditt metodnamn förmodligen bli bättre.
Ett exempel på detta är att om du behöver hämta användare från en databas med ytterligare villkor, kanske de är användare över 50 år gamla, så namnge inte din metod getUsers . Ett bättre sätt att namnge det är getAllUsersOver50YearsOld .