Pregunta

Empecé a estudiar Laravel y se topó con un problema a partir de modelos.Cómo cargar?Por ejemplo, en CodeIgniter, yo lo he utilizado como $model = $this->load->model('some_model').En Laravel cuando me llaman desde el controlador como Sites::OfUser() trabajo fino, pero cuando me llaman Sites::getId() se dice que el método debe ser estático...Es posible llamar a método, sin estática o necesito crear fachadas para cada modelo?

Mi modelo se parece a esto:

namespace Models;

use Eloquent;

class Sites extends Eloquent {

    public function scopeOfUser($query)
    {}

    public function getId($name)
    {}
}
¿Fue útil?

Solución

Para el método estático--

$tipo = Sitios ::scopeOfUser($consulta);

y si usted desea normal como codeingiter a continuación, utilice--

$modelo = new Sitios ();
$tipo = $modelo->scopeOfUser($consulta);

Otros consejos

Por supuesto, usted puede hacer un método estático en el modelo, y hacer algo estático de trabajo (get ID nombre o lo que sea).

Eso no es problema.

Sin embargo, usted debe declarar estática si desea utilizar el ::, que usted está haciendo no.

public static /* <-- this */ function getId($name)
{
    // Do work
    // return $result;
}

Si desea acceder a un método con ::, usted tendrá que hacer es un método estático o crear un Fachada.

La razón por la que Sites::OfUser() es "trabajo", es porque ya tienen el prefijo que con el método de scope.

Los ámbitos de permiten fácilmente re-uso de consulta de la lógica en sus modelos.A definir un ámbito, simplemente prefijo de un modelo con el método de scope.

Si desea utilizar Fachadas puedes seguir mi respuesta aquí ¿cómo crear una Fachada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top