Como carregar modelos no Laravel?
-
21-12-2019 - |
Pergunta
Eu comecei a estudar Laravel e se deparou com um problema usando modelos.Como carregá-los?Por exemplo, no CodeIgniter eu usei ele como $model = $this->load->model('some_model')
.No Laravel quando eu chamá-lo a partir do controlador de como Sites::OfUser()
ele funciona bem, mas quando eu chamo Sites::getId()
ele diz que o método deve ser estática...É possível chamar o método sem estático ou que eu preciso para criar fachadas para cada modelo?
O meu modelo parecido com este:
namespace Models;
use Eloquent;
class Sites extends Eloquent {
public function scopeOfUser($query)
{}
public function getId($name)
{}
}
Solução
Para o método estático--
$tipo = Sites ::scopeOfUser($consulta);
e se você quiser normal como codeingiter, em seguida, use--
$model = new Sites ();
$tipo = $model->scopeOfUser($consulta);
Outras dicas
Você pode, claro, fazer um método estático no modelo, e fazer algumas estática trabalho (get IDENTIFICAÇÃO por nome ou qualquer outra coisa).
Isso não é problema.
No entanto, você deve declará-lo estático se você deseja usar o ::
, o que você está fazendo não.
public static /* <-- this */ function getId($name)
{
// Do work
// return $result;
}
Se você quiser acessar um método com ::
, você vai precisar fazer é um método estático ou criar um Fachada.
A razão pela qual Sites::OfUser()
é "trabalhar" é porque você tem o prefixo que o método com scope
.
Escopos permite que você facilmente re-utilizar a lógica de consulta de seus modelos.Para definir um escopo, simplesmente prefixo de um modelo de método com
scope
.
Se você quiser usar Fachadas você pode seguir a minha resposta aqui sobre como criar uma Fachada.