Проблем
Опитвам се да взема красноречив модел от базата данни, но продължавам да влизам BadMethodCallExceptionMethod [намери]
не съществува.
Ето какво опитах досега:
App пространство за имена;използвайте Illuminate \ Database \ Eloquent \ Model;
използвайте App \ Organization;
class Потребителят разширява Model
/ **
* Таблицата на базата данни, използвана от модела.
*
* @var низ
* /
защитен $ table = 'потребители';
/ **
* Атрибутите, изключени от JSON формата на модела.
*
* @var масив
* /
защитен $ hidden = array ('парола');
организации с обществена функция ()
върнете $ this-> pripadaToMany (Организация :: клас);
Това е основен потребителски клас, който идва с всеки нов проект на Laravel. След създаването на нов потребител ясно виждам, че потребител с ID3 съществува в базата данни. Когато обаче направя следното, в крайна сметка получавам Методът BadMethodCallException [find] не съществува
публична функция getUser ($ id)
$ my_user = Потребител :: намери ($ id);
return view ('потребители.индекс ', масив (' потребител '=> $ my_user));
Файлови маршрути на Моите маршрути \ уеб.php:
Route :: get ('user / id', '[имейл защитен]');Route :: get ('/', function ()
return View :: make ('test');
);
Решение
Има няколко проблема с това изпълнение, които може да са причина за получаването ви Методът BadMethodCallException [find] не съществува
изключение.
- Трябва да следвате най-добрите практики при именуване на вашите контролери като вашата дума Model + „Controller“, така че в крайна сметка ще получите UserController вместо просто User .
- Класът потребител, за който се позовавате тук, всъщност не е свързан с вашия модел на приложение \ потребител. Ако го забележите, никога не сте включили изрично своя модел. Така че ако приемем, че вече сте фиксирали предишната точка, ще трябва да включите класа User във вашия UserController . Само тогава можете да създавате нови обекти, използвайки този клас. Така че във вашия UserController отидете и добавете use App \ User; на върха. (Забележете как включих App \ Organization)
- След като го поправите, трябва да стартирате composer dump -o, за да регенерирате композитора.lock файл, който ще ви помогне да ускорите зареждането на вашите класове.
След това трябва да имате достъп до вашия App \ User модел, както сте планирали.
Допълнителни обяснения (само за образователни цели)
Както знаете, уеб разработката никога не е означавало да бъде моноспектакъл. Като цяло можете да очаквате да си сътрудничите с други разработчици около 90% от времето. За да бъде проектът успешен, трябва да се уверите, че всички спазват общи правила за кодиране.
Едно от правилата ще бъде свързано с конвенциите за именуване и разбирам, че спазването на определена конвенция за именуване изисква много усилия и потенциално може да загуби много от времето на екипа, докато всички могат да ги разберат и следват. Това е особено трудно за нови разработчици, които се присъединяват към екипа.
Бих ви предложил да се опитате да прочетете повече от кода на други хора, преди да започнете да пишете своя, само за да получите представа за най-добрите отраслови практики.
Някои правила са задължителни, а някои са оставени на екипа да реши как иска да подходи.
Разглеждайки проблема отгоре, ще забележите, че всички класове трябва да бъдат написани в StudlyCaps, така че UserController, а не user_controller .
И това е пример за задължително правило, което трябва да се следва.
Сега пример за това, което вие като екип бихте могли да определите като ваше вътрешно правило, е как назовавате своите класове, методи и променливи.
Ако се очаква даден проект да расте с течение на времето, със сигурност можете да очаквате много различни обекти, които по един или друг начин включват Потребител, така че е важно да не измисляте неясни имена за вашите класове, методи и променливи.
Моят личен съвет тук е; не се страхувайте да имате по-дълъг клас или име на метод. Ако трябва да имате коментар, който обяснява вашия метод, тогава името на метода ви може да е по-добро.
Пример за това е, че ако трябва да получите потребители от база данни с някакво допълнително условие, може би това са потребители на възраст над 50 години, тогава не назовавайте метода си getUsers . По-добър начин да го наименувате е getAllUsersOver50YearsOld .