Metoda Laravel badmetodcallexception [Find] nie istnieje

Metoda Laravel badmetodcallexception [Find] nie istnieje

Problem

Próbowałem uzyskać elokwentny model z bazy danych BadmethodcallexceptionMethod [znajdź] nie istnieje.

Oto, co do tej pory próbowałem:

Aplikacja przestrzeni nazw;
Użyj Illuminate \ Database \ eloquent \ Model;
Użyj App \ Organizacja;
Użytkownik klasy rozszerza model
/**
* Tabela bazy danych używana przez model.
*
* String @VAR
*/
Protected $ table = „Użytkownicy”;
/**
* Atrybuty wykluczone z formularza JSON modelu.
*
* @VAR Array
*/
Protected $ hidden = array („hasło”);
Organizacje funkcji publicznych ()

zwróć $ this-> należą do stałcy (organizacja :: klasa);

To podstawowa klasa użytkownika, która jest dostarczana z każdym nowym projektem Laravel. Po utworzeniu nowego użytkownika wyraźnie widzę, że użytkownik z ID3 istnieje w bazie danych. Jednak kiedy to robię, kończę na Metoda badmetodcallexception [Find] nie istnieje

Użytkownik klasy rozszerza Basecontroller
Funkcja publiczna Getuser ($ id)

$ my_user = user :: Find ($ id);
Widok powrotu („Użytkownicy.indeks ', array („user” => $ my_user));

Moje trasy Plik Routes \ Web.PHP:

Trasa :: 'user/id', 'user@getuser');
Trasa :: get ('/', funkcja ()

Return View :: Make („Test”);
);

Rozwiązanie

Istnieje kilka problemów z tym wdrożeniem, które mogą powodować otrzymanie Metoda badmetodcallexception [Find] nie istnieje wyjątek.

  • Powinieneś postępować zgodnie z najlepszymi praktykami w nazywaniu swoich kontrolerów jako słowa modelu + „kontrolera”, aby skończyć z UserController zamiast tylko użytkownika .
  • Klasa użytkowników, o której tu nazywasz. Jeśli to zauważysz, nigdy nie uwzględniłeś wyraźnie swojego modelu. Zakładając więc, że już naprawiłeś poprzedni punkt, musisz dołączyć klasę Theuser w swoim UserController . Tylko wtedy możesz zrobić nowe obiekty za pomocą tej klasy. Tak więc w UserController Go i Add Add Usum App \ User; na górze. (Zwróć uwagę, jak uwzględniłem App \ Organization)
  • Po naprawieniu powinieneś uruchomić zrzut kompozytora -O w celu regeneracji kompozytora.Zablokuj plik, który pomoże przyspieszyć ładowanie twoich klas.

Po zrobieniu tego powinieneś być w stanie uzyskać dostęp do swojej aplikacji \ Użytkownik, tak jak zamierzałeś.

Dalsze wyjaśnienie (wyłącznie dla celów edukacyjnych)

Jak wiecie, tworzenie stron internetowych nigdy nie miało być programem jednoosobowym. Na ogół możesz spodziewać się współpracy z innymi programistami w około 90% przypadków. Aby projekt się udał, musisz upewnić się, że wszyscy przestrzegają ogólnych zasad kodowania.

Zgodnie z zasadami dotyczy konwencji nazewnictwa i rozumiem, że nadążanie za określoną konwencją nazewnictwa wymaga dużo wysiłku i może potencjalnie zmarnować dużo czasu zespołu, dopóki każdy nie będzie w stanie ich zrozumieć i przestrzegać. Jest to szczególnie trudne dla nowych programistów dołączających do zespołu.

Sugerowałbym, abyś spróbował przeczytać więcej kodu innych osób, zanim zaczniesz pisać swoje, aby zrozumieć najlepsze praktyki branżowe.

Niektóre zasady są obowiązkowe, a niektóre są pozostawione zespołowi, aby zdecydować, w jaki sposób chcą się zbliżyć.

Patrząc na ten problem z góry, zauważysz, że wszystkie klasy powinny być napisane w studlycaps, więc UserController, a nie User_Controller .

I jest to przykład obowiązkowej reguły do ​​przestrzegania.

Teraz przykładem tego, co jako zespół możesz zdefiniować jako regułę wewnętrzną, jest sposób, w jaki nazywasz swoje klasy, metody i zmienne.

Jeśli oczekuje się, że projekt będzie się rozwijał z czasem, z pewnością możesz oczekiwać wielu różnych podmiotów, które w ten czy inny sposób obejmują użytkownika, więc ważne jest, aby nie wymyślić niejasnych nazwisk dla swoich klas, metod i zmiennych.

Moją osobistą wskazówką jest; Nie bój się mieć dłuższej klasy lub nazwy metody. Jeśli potrzebujesz komentarza, który wyjaśnia twoją metodę, nazwa twojej metody może być prawdopodobnie lepsza.

Przykładem tego jest to, że jeśli chcesz uzyskać użytkowników z bazy danych z dodatkowym stanem, być może są to użytkownicy powyżej 50 lat, nie nazwij swojej metody GetUsers . Lepszym sposobem na nazwanie tego jest GetAllusersover50Yearsold .