¿Para que sirven los modelos en Laravel 5.3?

publicado por: Anonymous

Disculpen mi ignorancia. Yo creo los modelos de la siguiente manera:

php artisan make:model Marcas -m

Y el modelo lo dejo tal cual se crea:

namespace App;

use IlluminateDatabaseEloquentModel;

class Marcas extends Model
{
    //
}

Modifico las migraciones asi:

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateMarcasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('marcas', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nombre');
            $table->string('descripcion');
            $table->boolean('status');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('marcas');
    }
}

Manipulo todas las funciones desde el controlador que lo creo así:

php artisan make:controller MarcasController --resource

Y lo modifico hasta quedar asi:

namespace AppHttpControllers;

use IlluminateHttpRequest;

use AppHttpRequests;

use IlluminateContractsAuthGuard;
use Closure;
use Auth;
use Session;
use Redirect;
use DB;
use PDO;
use Validator;
use Response;
use Datatables;
use Debugbar;
use Alert;
use IlluminateSupportFacadesInput;
use AppMarcas;

class MarcasController extends Controller
{
    protected $auth;
    public function __construct(Guard $auth){
        $this->auth = $auth;
        $this->middleware('auth');
        $this->middleware('ruta:Marcas');
        $this->middleware('funciones:Marcas,crear',['only'=>['crear']]);
        $this->middleware('funciones:Marcas,editar',['only'=>['editar']]);
        $this->middleware('funciones:Marcas,eliminar',['only'=>['eliminar']]);
        $this->middleware('funciones:Marcas,estado',['only'=>['estado']]);
    }
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index(){
        return view('marcas.index');
    }

    public function tabla(Request $request){
        try{
            $sql = Marcas::select(array('id', 'nombre', 'descripcion', 'status'));
            return Datatables::of($sql)
            ->addColumn('action', ' Editar  Eliminar')
            ->addColumn('estado', 'activo')
            ->filter(function ($query) use ($request) {
                if ($request->has('campo')) {
                    $query->where(DB::raw("CONCAT( nombre, ' ', descripcion )"), 'ilike', "%{$request->get('campo')}%");
                }
                if ($request->has('status')) {
                    $query->where('status', '=', "{$request->get('status')}");
                }
            })
            ->make();
        }catch(IlluminateDatabaseQueryException $e){
            $array = array(
                'mensaje' => $e->getMessage(),
                'codigo' => $e->getCode(),
                'sql' => $e->getSql(),
                'bindings' => $e->getBindings(),
            );
            return Response::json(array('ErrorSql' => $array));
        }
    }

    public function crear(Request $req) {
        $rules = array(
            'nombre' =>  'required|unique:cargos|min:5|max:30',
        );
        $validator = Validator::make ( Input::all (), $rules );
        if ($validator->fails()){
            return Response::json(array('errors' => $validator->getMessageBag()->toArray()));
        }else{
            try{
                $cargos = new Marcas();
                $cargos->nombre = $req->nombre;
                $cargos->status = 't';
                $cargos->save();
                return Response::json(array('correcto' => $cargos->toArray()));
            }catch(IlluminateDatabaseQueryException $e){
                $array = array(
                    'mensaje' => $e->getMessage(),
                    'codigo' => $e->getCode(),
                    'sql' => $e->getSql(),
                    'bindings' => $e->getBindings(),
                );
                return Response::json(array('ErrorSql' => $array));
            }
        }
    }

    public function editar(Request $req){
        $rules = array(
            'nombre' =>  'required|min:5|max:30',
        );
        $validator = Validator::make ( Input::all (), $rules );
        if ($validator->fails()){
            return Response::json(array('errors' => $validator->getMessageBag()->toArray()));
        }else{
            try{
                if(Marcas::where('nombre', 'ilike', $req->nombre)->where('id', '', $req->id)->exists()){
                    return Response::json(array('encontrado' => 'nombre ya ha sido registrado'));
                }else{
                    $cargos = Marcas::find ($req->id);
                    $cargos->nombre = $req->nombre;
                    $cargos->save();
                    return Response::json(array('correcto' => $cargos->toArray()));
                }
            }catch(IlluminateDatabaseQueryException $e){
                $array = array(
                    'mensaje' => $e->getMessage(),
                    'sql' => $e->getSql(),
                    'bindings' => $e->getBindings(),
                );
                return Response::json(array('ErrorSql' => $array));
            }
        }
    }

    public function eliminar(Request $req){
        try{
            Marcas::find($req->id)->delete();
                $array = array(
                    'mensaje' => 'todo bn',
                );
                return Response::json(array('correcto' => $array));
        }catch(IlluminateDatabaseQueryException $e){
            if($e->getCode()==23503){
                $array = array(
                    'mensaje' => $e->getMessage(),
                    'sql' => $e->getSql(),
                    'bindings' => $e->getBindings(),
                );
                return Response::json(array('ClaveForanea' => $array));
            }else{
                $array = array(
                    'mensaje' => $e->getMessage(),
                    'sql' => $e->getSql(),
                    'bindings' => $e->getBindings(),
                );
                return Response::json(array('ErrorSql' => $array));
            }
        }
    }

Segun leo en este articulo: enlace
dice que alli definimos que campos podemos modificar, eliminar, etc.
Pero yo en los modelos de Laravel ni los toco y todo me anda bien.

Que hacen realmente los modelos en laravel.

solución

La respuesta a la pregunta la encuentras en el archivo: IlluminateDatabaseEloquentModel, analizando cada propiedad y cada método puedes hacerte la idea de para qué sirve un modelo y cuando tener uno o no para una tabla.

En general con un modelo en Laravel puedes:

  • Establecer los parámetros de interacción con la tabla correspondiente en la base de datos (nombre, llaves, campos protegidos, etc.)
  • Establecer las relaciones con otras tablas, para poder precargar dicha información como propiedad de cada modelo (tal vez la función más importante de todas, y la que más tiempo puede ahorrarnos)
  • Realizar ciertas tareas simples y típicas como guardar, obtener todos los registros, borrar, etc.
  • Aprovechar “Eager Loading”, bastante útil en muchas situaciones
  • Disparar eventos
  • Manejar paginación

Entre tantas otras funciones que puedes ver en el archivo en mención.

Por cierto, las consultas complejas que necesites hacer a la base de datos no deberían ser realizadas ni desde un controlador (no es su responsabilidad) ni en el modelo, para esto puedes usar preferiblemente un repositorio.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *