ultimo registro obtener modelos metodo insertado ejemplos consultas con all php laravel laravel-4 eloquent facade

php - registro - Métodos del modelo personalizado de Laravel



obtener ultimo registro insertado laravel (2)

Cada vez que agrego lógica adicional a los modelos Eloquent, termino teniendo que hacer que sea un método static (es decir, menos que ideal) para llamarlo desde la fachada del modelo. Intenté buscar mucho sobre cómo hacer esto de la manera correcta y prácticamente todos los resultados hablan sobre la creación de métodos que devuelven partes de una interfaz de Query Builder. Estoy intentando descubrir cómo agregar métodos que pueden devolver cualquier cosa y ser llamados usando la fachada del modelo.

Por ejemplo, digamos que tengo un modelo llamado Car y quiero obtenerlos todos:

$cars = Car::all();

Genial, excepto por ahora, digamos que quiero ordenar el resultado en una matriz multidimensional, para que mi resultado se vea así:

$cars = array( ''Ford'' => array( ''F-150'' => ''...'', ''Escape'' => ''...'', ), ''Honda'' => array( ''Accord'' => ''...'', ''Civic'' => ''...'', ), );

Tomando ese ejemplo teórico, estoy tentado de crear un método que se pueda llamar así:

$cars = Car::getAllSortedByMake();

Por un momento, olvidemos el terrible nombre del método y el hecho de que está estrechamente relacionado con la estructura de datos. Si hago un método como este en el modelo:

public function getAllSortedByMake() { // Process and return resulting array return array(''...''); }

Y finalmente llámalo en mi controlador, obtendré esta Excepción lanzada:

Método no estático Car :: getAllSortedByMake () no se debe llamar estáticamente, asumiendo $ this desde contexto incompatible

TL; DR : ¿Cómo puedo agregar una funcionalidad personalizada que tenga sentido para estar en el modelo sin convertirlo en un método estático y llamarlo usando la fachada del modelo?

Editar:

Este es un ejemplo teórico. Quizás una reformulación de la pregunta tendría más sentido. ¿Por qué ciertos métodos no estáticos como all() o which() disponibles en la fachada de un modelo de Eloquent, pero no se añaden métodos adicionales al modelo? Esto significa que se está utilizando el método de __call mágica, pero ¿cómo puedo hacer que reconozca mis propias funciones en el modelo?

Probablemente, un mejor ejemplo sobre la "clasificación" sea si necesito ejecutar un cálculo o algoritmo en un dato:

$validSPG = Chemical::isValidSpecificGravity(-1.43);

Para mí, tiene sentido que algo así esté en el modelo ya que es un dominio específico.


Mi pregunta es más de un nivel fundamental, como por qué todo () accesible a través de la fachada?

Si miras el Laravel Core - all () es en realidad una función estática

public static function all($columns = array(''*''))

Tienes dos opciones:

public static function getAllSortedByMake() { return Car::where(''....'')->get(); }

o

public function scopeGetAllSortedByMake($query) { return $query->where(''...'')->get(); }

Ambos te permitirán hacer

Car::getAllSortedByMake();


para un mejor código dinámico, en lugar de usar el nombre de clase de modelo "Coche",

solo use "static" o "self"

public static function getAllSortedByMake() { //to return "Illuminate/Database/Query/Builder" class object you can add another where as you want return static::where(''...''); //or return already as collection object return static::where(''...'')->get(); }