En esta entrada lo que vamos a hacer va a ser conectar Laravel a la base de datos que crearemos, crear un modelo y utilizarlo y mostrar los resultados de una consulta a la base de datos en la vista.
Crear base de datos con PHPMyAdmin
Crear una base de datos con PHPMyAdmin es muy simple. Simplemente tenemos que entrar en localhost/phpmyadmin e ir al botón Nueva está en el sidebar de la izquierda. Nos llevará a otra página, ponemos el nombre de nuestra base de datos y el cotejamiento y le damos a crear. Yo he creado una con el nombre blog.
Conectar Laravel con nuestra base de datos
Deberemos abrir el archivo .env que hay en la raíz y debemos modificar a partir de la línea 8. En mi caso queda así:
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD= |
Crear primer modelo
Como vamos a aprovechar el controlador que creamos anteriormente, voy a crear un modelo de Post. Puedes crearlo manualmente o por la línea de comandos, yo lo voy a crear por la línea de comandos.
Vamos a la raíz de nuestro proyecto y ejecutamos este comando, que lo que hará será crearnos el modelo y su archivo de migración. Si no queremos el archivo de migración quitamos -m:
1 |
php artisan make:model Post -m |
Migraciones
Las migraciones son muy útiles ya que te permiten crear la estructura de tablas y columnas de la base de datos sin tener que tocar una sola línea de SQL. Simplemente ejecutando un comando.
Vamos a crear la migración para la tabla posts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('body'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } } |
En este enlace puedes encontrar todos los tipos de campos que permite Laravel.
Para ejecutarla:
1 |
php artisan migrate |
Si todo sale bien, nos saldrá un mensaje conforme ya están creadas.
Añadimos datos a mano en la tabla posts desde el propio PHPMyAdmin.
Mostrar datos de la base de datos en la vista
Abrimos el controlador PostsController.php y vamos a modificarlo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Post; class PostsController extends Controller { public function show($id) { $post = Post::findOrFail($id); return view('post', ['post' => $post]); } public function index() { $posts = Post::all(); return view('posts', ['posts' => $posts]); } } |
Hemos añadido un nuevo método que coge todos los posts que hay en la base datos. El otro simplemente coge uno a partir del id, si no existe retorna un error 404. Esto es gracias al ORM de Laravel, Eloquent. Más adelante profundizaremos en él.
También tenemos que añadir la nueva ruta.
1 2 |
Route::get('/posts', 'PostsController@index'); Route::get('/post/{id}', 'PostsController@show'); |
Y las vistas:
1 2 3 4 5 6 |
<h3>Posts</h3> @foreach ($posts as $post) <p>{{ $post->title }}</p> <a href="{{URL::to('/')}}/post/{{ $post->id }}">Go</a> @endforeach |
1 2 3 4 |
<h3>{{ $post->title }}</h3> <div> {{ $post->body }} </div> |
Y ya mostramos todos los posts existentes en la base de datos si accedemos a localhost:8000/posts .
En la siguiente entrada vamos a ver como crear contenido a partir de un formulario y validar estos datos, para que se guarde en la base de datos lo que nosotros queremos.
Excelente tutorial muy bien explicado todo, estoy siguiendo todo paso a paso .. pero me encontré con un problema , estoy en la parte de crear la tabla desde el código generado en migrations, está tal cual, pero al momento de dar el comando en cmd «php artisan migrate» creó una tabla users , después lo ejecuté nuevamente y dice que la tabla users ya existe, pero no es la tabla post que quiero crear. no sé que estaré haciendo mal.
De nuevo mil gracias por el tutorial.
Ya lo solucioné, quité de la carpeta database/migratios .. los dos archivos migrations que se encontraban por defecto user y password y el de post, creé de nuevo la tabla con php artisan make:migration create_table_posts_table .. le di nuevamente al comando php migrate artisan y funcionó.
De nuevo mil gracias por estos tutoriales . Está excelente!
Como puedo traerme las tablas que cree en mysql, a mi proyecto laravel para poder realizar las consultas?
Este link responde a mi consulta
https://es.stackoverflow.com/questions/34636/migrar-mi-base-de-datos-de-mysql-a-laravel
Que tal he realizado todo al pie de la letra pero al ejecutar:
localhost:8000/posts
Me muestra este mensaje:
Illuminate \ Database \ QueryException (1045)
SQLSTATE[HY000] [1045] Access denied for user ‘homestead’@’localhost’ (using password: YES) (SQL: select * from
posts
)Previous exceptions
SQLSTATE[HY000] [1045] Access denied for user ‘homestead’@’localhost’ (using password: YES) (1045)
Esto a pesar de que ya configure el archivo .env , ¿ Se tiene que configurar algún otro archivo extra?
Gracias y Saludos!!
Hola Raúl!
Muchas gracias por tu comentario.
Ese error es un error de conexión a la base de datos. Debido a que no estás poniendo bien los datos de conexión en el .env. Revisa que estén bien y una vez estén bien, ese error debería desaparecer.
Un saludo! ?
Hola buenas tardes, la información de conexión a la base de datos la tengo bien ya que tuve que configurar el archivo .env para poder crear de la migración de la tabla posts:
php artisan migrate
Hola Raúl!
Has probado a cambiar
localhost
por127.0.0.1
en el .env?Te dejo aquí unos enlaces que te podrían ser de ayuda:
– https://stackoverflow.com/questions/29756194/access-denied-for-user-homesteadlocalhost-using-password-yes
– https://stackoverflow.com/questions/20723803/pdoexception-sqlstatehy000-2002-no-such-file-or-directory
Has probado alguna de las soluciones que proponen?
Dime algo si te han servido o si no cómo lo has resuelto para que a otros usuarios les pueda ayudar tu solución.
Muchas gracias! Espero que te ayude.?
Un saludo!
Que tal gracias por tu ayuda, en los foros que me enviaste vi que a parte de configurar correctamente la conexión a la base de datos, se debe de detener la ejecución del servidor de Laravel y volverlo a ejecutar:
php artisan serve
Saludos!!!
Hola!
De nada, me alegro que al final lo hayas solucionado?
Un saludo!