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)
    {}
}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top