laravel - hacer - ¿Cuándo usar Eloquent(ORM) sobre Fluent(Query Builder)?
consultas eloquent laravel (2)
Tal vez debido a mi experiencia con Codeigniter, simplemente no me encuentro disfrutando mucho del ORM Eloquent de Laravel 4. Digamos que me gustaría escribir una consulta que ordene una lista de publicaciones por ID, descendiendo, ¿cómo puede Eloquent vencer la claridad de DB::table(''posts'')->orderBy(''id'', ''desc'')->get();
?
¿Hay alguna buena razón para usar Eloquent sobre Fluent, fue principalmente para unir mesas?
También vine de Codeigniter y esta es mi experiencia: uso Eloquent y Fluent generalmente juntos. Eloquent es una cosa que le permite trabajar muy bien con relaciones, operaciones CRUD, etc. Cuando necesite hacer algunas operaciones SQL, puede agregar fácilmente algunas funciones fluidas
En el ejemplo que mencionaste anteriormente, veo que tienes una tabla de publicaciones. Si tiene un modelo de publicación, lo mismo que se escribe con Eloquent es:
Post::orderBy(''id'', ''desc'')->get();
Así que como lo entiendo si extiendes Eloquent de
Model_name::some_functions
es lo mismo que
DB::table(''table_name'')->some_functions
El verdadero poder viene cuando necesitas crear o actualizar un modelo, o, por ejemplo, obtener comentarios de la publicación. De lo que se convierte fácilmente:
$comments = Post::find($id)->comments;
Entonces, la respuesta es: tienes que usar funciones fluidas para obtener una lista ordenada. Puede usarlos con DB :: table (''publicaciones'') -> orderBy o Post :: orderBy
Usando modelos y Eloquent, también puede escribir funciones personalizadas en su clase de modelo para realizar operaciones comunes como, por ejemplo, generar un par de campos concatenados.
por ejemplo:
<?php
class User extends Eloquent {
//Standard Relation Function
public function posts() {
return $this->hasMany(''Post'');
}
//Custom function
public function fullname() {
return $this->firstName.'' ''.$this->lastName;
}
}
//Somewhere else in your code, if you need a users full name...
$user = User::find(3);
$name = $user->fullname();