laravel 5.6 ORM eloquent



Route::get('mensajes/crear', ['as'=>'mensajes.create','uses'=>'MessagesController@create']);
Route::post('mensajes', ['as'=>'mensajes.store','uses'=>'MessagesController@store']);
Route::get('mensajes', ['as'=>'mensajes.index','uses'=>'MessagesController@index']);
Route::get('mensajes/{id}', ['as'=>'mensajes.show','uses'=>'MessagesController@show']);
Route::get('mensajes/{id}/edit', ['as'=>'mensajes.edit','uses'=>'MessagesController@edit']);
Route::put('mensajes/{id}', ['as'=>'mensajes.update','uses'=>'MessagesController@update']);
Route::delete('mensajes/{id}', ['as'=>'mensajes.destroy','uses'=>'MessagesController@destroy']);


todas las lineas anteriores, se pueden reemplazar por una sola linea:

Route::resource('mensajes','MessagesController');

si listamos todas las rutas de nuestro proyecto

php artisan route:list

veremos algo asi











ORM

representacion de una tabla como una clase

table messages = clase Message

por convencion las tablas en plural y la clase en singular


php artisan make:model Message

esto creara en App el archivo Message.php

Laravel relacionara automaticamente una tabla con el mismo nombre de la clase pero en plural.

(si se quiere tener una clase que no cumpla esta regla se puede
agregar la sgt propiedad

protected $table = 'nombre de la tabla';
)

entonces ahora en el controller reemplazamos el querybuilder con el modelo

en la funcion que lista los mensajes


//$messages = DB::table('messages')->get();

 $messages = Message::all();


en la que crea un mensaje

 Message::create($request->all());


claro que para que funcione (asi nos dara una error porque en la asignacion masiva de datos no encuentra  un campo llamado _token, por ahora se lo quitamos y desactivamos la validacion por csfr

debemos tambien indicarle a laravel que campos vamos a permitir que se envien de modo masivo
(de otro modo manipulando el dom, se podran enviar campos como id que no queremos que se envien)

entonces en el modelo

protected $fillable = ['nombre','email','mensaje'];

laravel automaticamente le agrega los campos created_at  y updated_at


y en los metodos que muestra un mensaje:

   $message = Message::find($id);

claro que si se introduce un id que no existe nos va a dar una exception pues la vista por ejemplo de show va a querer acceder a las propiedades de un objeto nulo.

lo que se puede hacer es

$message = Message::findOrFail($id);

si no lo encuentra devuelve un error 404

podemos entonces ahora personalizar el error

en resources/views/errors

creamos 404.blade.php

<!DOCTYPE html>
<html>
<head>
<title>error</title>
</head>
<body>
No se pudo encontrar el recurso.

<a href="{{ route('home') }}">volver</a>
</body>
</html>

para la actualizacion:

$message = Message::findOrFail($id);
        $message->update($request->all())  ;

se puede hacer en una linea

Message::findOrFail($id)->update($request->all())  ;

para la eliminacion:

Message::findOrFail($id)->delete()  ;










No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable