Problema
Tenho tentado obter um modelo do Eloquent do banco de dados, mas continuo tentando BadMethodCallExceptionMethod [find]
não existe.
Aqui está o que tentei até agora:
namespace App;use Illuminate \ Database \ Eloquent \ Model;
use App \ Organização;
class User extends Model
/ **
* A tabela de banco de dados usada pelo modelo.
*
* @var string
* /
protegido $ table = 'usuários';
/ **
* Os atributos excluídos do formulário JSON do modelo.
*
* @var array
* /
protegido $ escondido = array ('senha');
organizações de função pública ()
return $ this-> belongsToMany (Organization :: class);
Esta é uma classe de usuário básica que vem com cada novo projeto Laravel. Depois de criar um novo usuário, posso ver claramente que o usuário com ID3 existe no banco de dados. No entanto, quando faço o seguinte, acabo com o Método BadMethodCallException [find] não existe
public function getUser ($ id)
$ my_user = User :: find ($ id);
visualização de retorno ('usuários.índice ', array (' usuário '=> $ meu_usuário));
Arquivo Minhas rotas rotas \ web.php:
Route :: get ('user / id', '[email protected]');Route :: get ('/', function ()
return View :: make ('test');
);
Solução
Existem alguns problemas com esta implementação que podem estar fazendo com que você receba Método BadMethodCallException [find] não existe
exceção.
- Você deve seguir as melhores práticas ao nomear seus controladores como seu Modelo + palavra "Controlador" para que você termine com um UserController em vez de apenas o usuário .
- A classe de usuário que você está se referindo aqui não está realmente relacionada ao seu modelo App \ User. Se você notar, você nunca incluiu explicitamente o seu modelo. Então, supondo que você já corrigiu o ponto anterior, você precisaria incluir a classe de usuário em seu UserController . Só então você pode fazer novos objetos usando essa classe. Portanto, em seu UserController, vá e adicione use App \ User; no topo. (Observe como incluí App \ Organização)
- Depois de corrigi-lo, você deve executar composer dump -o para regenerar o composer.arquivo de bloqueio que ajudará a acelerar o carregamento de suas aulas.
Depois de fazer isso, você deve ser capaz de acessar seu modelo App \ User como pretendia.
Explicação adicional (apenas para fins educacionais)
Como você sabe, o desenvolvimento da web nunca teve a intenção de ser um show de um homem só. Em geral, você pode esperar colaborar com outros desenvolvedores cerca de 90% do tempo. Para que o projeto seja bem-sucedido, você deve se certificar de que todos estão seguindo as regras gerais de codificação.
Uma das regras será sobre convenções de nomenclatura e eu entendo que manter uma convenção de nomenclatura definida requer muito esforço e pode potencialmente desperdiçar muito tempo da equipe até que todos possam entendê-la e segui-la. Isso é especialmente difícil para novos desenvolvedores que se juntam à equipe.
Eu sugiro que você tente ler mais sobre o código de outras pessoas antes de começar a escrever o seu, apenas para ter uma noção das melhores práticas da indústria.
Algumas regras são obrigatórias e outras são deixadas para a equipe decidir como eles querem abordar.
Olhando para o problema acima, você notará que todas as classes devem ser escritas em um StudlyCaps, então UserController e não user_controller .
E este é um exemplo de regra obrigatória a seguir.
Agora, um exemplo do que você como uma equipe pode definir como sua regra interna é como você nomeia suas classes, métodos e variáveis.
Se é esperado que um projeto cresça com o tempo, você certamente pode esperar muitas entidades diferentes que de uma forma ou de outra incluem um usuário, então é importante que você não venha com nomes vagos para suas classes, métodos e variáveis.
Minha dica pessoal aqui é; não tenha medo de ter uma classe mais longa ou um nome de método. Se você precisa de um comentário que explique o seu método, então o nome do seu método provavelmente pode ser melhor.
Um exemplo disso é que se você precisar obter usuários de um banco de dados com alguma condição adicional, talvez esses sejam usuários com mais de 50 anos, então não nomeie seu método getUsers . A melhor maneira de nomeá-lo é getAllUsersOver50YearsOld .