Cada uno puede hacerlo de la manera más conveniente posible, recordar que éstos son ejemplos básicos, se puede tomar el código y mejorarlo, están en todo su derecho hacerlo. Tomar en cuenta la seguridad, las mejores prácticas, etc.
Inicio
En ésta cuarta parte, mostraré cómo crear modelos, operaciones con base de datos, etc.
Vamos a crear una tabla llamada Posts, ésta tabla almacenará posts, digamos artículos, publicaciones etc., de tal manera que pondremos en práctica las siguientes acciones:
- Crear Migración
- Crear Modelo
- Crear Controlador
Y además, crearemos las funciones o métodos básicos de agregar, eliminar, buscar, listar utilizando ajax.
Posts Admin
La idea es crear una mini aplicación web para crear, modificar, eliminar y consultar posts desde base de datos, esa es la idea general.
Aquí se pueden descargar los archivos de éste artículo https://github.com/jesusferm/laravel-crud-four
1.- Crear la tabla posts
Para crear la migración, se ejecuta el siguiente comando, el cual incluye el nombre de la tabla que será posts, y se creará un archivo en la ruta database/migrations/create_posts_table.php la cual vamos a modificar de acuerdo a lo que necesitamos
php artisan make:migration create_posts_table
Abrimos el archivo y agregamos lo siguiente:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->string('desc');
$table->string('slug');
$table->string('files');
$table->string('image');
$table->enum('status', ['pendiente','publicado']);
$table->integer('user_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Ahora ejecutamos el comando migration para crear la tabla en la base de datos:
/opt/lampp/bin/php artisan migrate
Y si revisamos la base de datos, desde phpmyadmin, ahí debe haber una tabla con el nombre de posts.
2.- Crear Modelo para la tabla posts
Ahora crearemos el modelo que se usará para posts, éste archivo se crea en la ruta app/ y contiene los campos que son accesibles a la base de datos.
php artisan make:model Posts
Éste archivo lo modificamos de la siguiente manera:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Posts extends Model
{
protected $fillable = ['desc', 'slug', 'files', 'image', 'status', 'user_id'];
}
3 Crear controlador para Posts
El controlador contiene toda la lógica de negocio de ABC que se requiere, lo de agregar, eliminar, consultar etc.
El comando genera el archivo PostsController.php en el directorio app/Http/Controllers.
php artisan make:controller TodoController --resource
Ahora modificaremos los routes, los routes son la forma en la que se accederá a la información, de cómo estará conformada la url: abrir el archivo routes/web.php y agregar los siguiente:
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('main');
});
Auth::routes();
/**
* se redirecciona a la lista de registros que tenga el usuario*/
Route::get('/home', 'PostsController@index')->name('home');
Route::group(['middleware' => 'auth'], function () {
Route::resource('/posts', 'PostsController');
});
Route::get('/add', 'PostsController@create');
Route::get('/postinsert', 'PostsController@ajaxAdd');
Route::post('/postinsert', 'PostsController@ajaxAdd');
Route::get('/postupdate', 'PostsController@ajaxUpdate');
Route::post('/postupdate', 'PostsController@ajaxUpdate');
Route::post('/postdelete', 'PostsController@ajaxDelete');
Route::post('/accountupdate', 'UsersController@upProfile');
Route::post('/upimage', 'UsersController@upImage');
Route::post('/loadimage', 'UsersController@loadImage');
Route::post('/uppassword', 'UsersController@upPassword');
Route::get('/post/{slug?}', ['as' => 'posts.post', 'uses' => 'PostsController@view']);
Route::post('/page', 'PostsController@load');
Route::get('/{slug?}', ['as' => 'home.view', 'uses' => 'HomeController@view']);
En el controlador PostsController tendremos todas las funciones completas de administración de los post de las base de datos:
Posts controller
No pondré todo el contenido del controlador, ya que es mucho, sin embargo pueden descargar el código del proyecto de github.
La vistas completas tendremos el siguiente resultado:
Vistas
Las vistas para la administración de posts, están dentro de la carpeta resources/views/posts/ ahí están todas las vistas que se usarán, añadí algunas funcionalidad extras, como ajax, en algunas funciones, sólo para que se pueda aprecia el funcionamiento del mismo, para la siguiente entrega, se realizará paginación en la vista principal y vista lectura de los posts.
Gracias y eso sería todo por ahora.