Entender Laravel

1

Novedades y herramientas actualizadas en Laravel

2

Desarrollo web con Laravel: proyectos y funcionalidades clave

3

Curso de Laravel 6: Configuración del Entorno de Desarrollo

4

Instalación y configuración de Laravel paso a paso

5

CRUD en Laravel: Crear, Leer, Actualizar y Eliminar Usuarios

6

"Creación de Controladores y Vistas en Laravel"

7

Creación de Formularios y Validación en Laravel con Bootstrap

Comprender los Fundamentos de Laravel

8

Rutas y Controladores en Laravel: Fundamentos Esenciales

9

Protección de Rutas y Controladores en Laravel con Middleware

10

Validación de Formularios en Laravel: Buenas Prácticas y Ejemplos

11

Sistema de Plantillas Blade en Laravel: Creación y Uso Eficiente

12

Implementación de Sistema de Autenticación en Laravel con Bootstrap

Aprender sobre Eloquent ORM

13

Manejo de Bases de Datos con Eloquent en Laravel

14

Relaciones de Tablas y Manipulación de Datos en Laravel

15

Manipulación de Colecciones y Serialización de Datos en Laravel

16

Manipulación de Datos en Bases de Datos con PHP

Crear PlatziPress

17

Creación de un Blog con Sistema de Autenticación y Slugs

18

Configuración de Migraciones, Factories y Seeders en Laravel

19

Configuración de Rutas y Controladores en Laravel para Listado de Posts

20

Configuración Visual y Paginación en Laravel y Vue.js

21

Gestión de Artículos en Laravel: Rutas, Controladores y Vistas

22

Creación de Formularios en PHP con HTML y Bootstrap

23

Validación y Guardado de Datos en Laravel

24

Formulario de Edición de Artículos con Laravel

25

Gestión de Formularios y Archivos en Laravel

26

Integración de Imágenes y Contenido Multimedia en Proyectos Web

Construir Proyecto Final: API con TDD (Intermedio)

27

Testing y Pruebas Funcionales en Laravel: Proyecto Intermedio

28

Pruebas de Software: Ciclo Rojo, Verde y Refactorización

29

Configuración de Proyectos en Laravel: Controladores y Pruebas

30

Desarrollo Guiado por Pruebas en Laravel: Configuración y Ejecución

31

Refactorización y Validación de Código en Pruebas Unitarias

32

Pruebas y Configuración de Controladores en Laravel

33

Actualización de Datos en Controladores: Método y Pruebas

34

Pruebas Unitarias para Método de Eliminación en Bases de Datos

35

Creación y Prueba de Métodos Index en PHP

36

Protección de APIs con Autenticación Token en Laravel

37

Desarrollo de Formularios con Blade y Verbalización de Datos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Configuración de Migraciones, Factories y Seeders en Laravel

18/37
Recursos

¿Cómo configurar correctamente la base de datos para nuestro proyecto?

Para trabajar eficazmente con tus datos en un proyecto, es crucial configurar adecuadamente la migración, el Factory y los archivos de semilla. Te guiaré en este proceso paso a paso, destacando cómo establecer correctamente cada componente, asegurando que tu base de datos esté lista para albergar datos de prueba confiables.

¿Cómo crear la estructura de migración?

Configurar la migración es el primer paso hacia un sólido manejo de datos. Esto implica definir la estructura y las relaciones entre las tablas en tu base de datos:

Table::string('title');
Table::text('body');
Table::text('high_friend');
Table::integer('user_id');
Table::string('slug')->unique();
  • Campos clave:
    • title: Definido como string, sirve para almacenar el título de cada entrada.
    • body: Utiliza text para mantener el contenido amplio que necesita espacio.
    • high_friend: Un text que permite almacenar datos embebidos como videos o notas.
    • user_id: Usado como referencia para conectar con la tabla de usuarios.
    • slug: Asegura unicidad para evitar duplicados, clave en SEO.

¿Cómo configurar el Factory y el Seeder?

Con la estructura de migración lista, el siguiente paso es preparar tus datos de prueba mediante Factory y Seeder. Este proceso es esencial para desarrollar y probar el comportamiento de tu aplicación sin comprometer datos reales.

Configuración del Factory

'user_id' => User::factory(),
'title' => $faker->sentence(),
'body' => $faker->text(800),
  • Usar Faker: Herramienta para generar datos ficticios, ideal para simular entornos reales.
  • Relación Factory-Tabla: Asegúrate de que haya una relación coherente entre el Factory y la estructura de tu tabla para evitar inconsistencias.

Creación manual de datos en Seeder

User::create([
    'name' => 'Nombre Usuario',
    'email' => '[email protected]',
    'password' => bcrypt('123456')
]);
Post::factory()->count(24)->create();
  • Usuario de pruebas: Crea un usuario de forma manual para tener control total sobre el acceso durante las pruebas.
  • Posts de prueba: Usa el Factory para generar múltiples entradas (24 en este caso) y simular un ambiente real de datos.

¿Cómo conectar y refrescar los datos?

Un paso clave es utilizar comandos en la terminal para ejecutar y refrescar estas configuraciones, asegurando que las tablas y datos estén correctamente establecidos.

  • Conectar base de datos: Crea la base de datos y conéctala adecuadamente en tu sistema.
php artisan migrate --seed
  • Comando de refresco: Usa comandos específicos para actualizar y poblar las tablas, garantizando un setup limpio y funcional.

¿Cómo verificar la correcta implementación?

Es crucial revisar que todo esté correctamente configurado antes de pasar al siguiente nivel del proyecto. Asegúrate de lo siguiente:

  • Verificar usuarios y datos generados: Comprueba en tu base de datos que el usuario de pruebas y los 24 posts estén correctamente creados y asignados.
  • Confirmar la encriptación de contraseñas: Revisa que las contraseñas estén debidamente encriptadas para mayor seguridad.

Con la configuración adecuada de la base de datos y los datos de prueba en su lugar, ¡estás listo para abordar la parte visual y mostrar estos datos en pantalla en tus siguientes desarrollos!

Aportes 40

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si a este curso lo hacen con Laravel 8 se pueden volver un poco locos. Siguiendo la documentación oficial y rascandome un poco la cabeza logre hacerlo fucnionar.
PostFactory:

<?php

namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class PostFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Post::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'user_id'   => 1,
            'title'     => $this->faker->sentence,
            'body'      => $this->faker->text(800),
        ];
    }
}

Para databaseseeder:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use App\Models\User;
use App\Models\Post;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        User::create([
            'name' => 'Italo Morales F',
            'email' => '[email protected]',
            'password' => bcrypt('123456')
        ]);

        Post::factory()->count(24)->create();
    }

}

Sutiles cambios, saludos y suerte

RESUMEN

Creacion de Tablas Entidades y Datos de Prueba

2 Crearemos la configuracion para trabajar con datos primero 
A) Migration
B)Factory
C)seed

A) _create_posts_table.php

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements("id"); //Define el campo Id

            $table->bigInteger("user_id")->unsigned();//inicializa FK

            $table->string("title");	
            $table->string("slug")->unique();//no hay 2 slugs iguales

            $table->string("image")}->nullable();//puede haber img o no
            
            $table->text("body");
            $table->text("iframe")->nullable(); //puede haber video o no


            $table->timestamps();

            $table->foreign("user_id")->references("id")->on("users")
//RELATION: //TABLA	     FK//En fk mira su campo id//en tabla users	
        });
    }
//////////////////////////////////////////////////////////////////////////

B)FACTORY crear el molde para los datos de prueba

$factory->define(Post::class, function (Faker $faker) {
    return [
        "user_id"   => 1,
        "title"     => $faker->sentence ,
        "body"      => $faker->text(800) ,

    ];
});
//////////////////////////////////////////////////////////////////////////
C) Seeder

class DatabaseSeeder extends Seeder
{

    public function run()
    {

	//creamos 1 user para probar el sistema
       App\User::create([
           "name"=>"Tomas Goldenberg",
           "email"=>"[email protected]",
           "password"=>bcrypt("123456")
        ]);


	//usamos el factory para crear 24 posts
        factory(App\Post::class, 24)->create();
        
    }

}

3 CONFIGURAR LA BASE DE DATOS
//crear la base de datos blog en tu cliente visual
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=



4 TERMINAL
sudo php artisan migrate:fresh --seed


TABLAS  CREADAS Y RELLENADAS

En Laravel 8, si les aparece el error:
BadMethodCallException Call to undefined method App\Models\Post::Factory()
Deben incluir en la carpeta Models en el Post.php despues de:
Use Slugabble;
La siguiente linea:
use HasFactory;
y volver a corrrer el comando:
php artisan migrate:refresh --seed

Al momento de ejecutar las migraciones con: php artisan migrate:refresh --seed, me muestra el siguiente error, me genera las migraciones pero al parecer el problema esta con el factory espero alguien pueda ayudarme a solucionar el problema Gracias…

Comparto mi código del **factory ** y del **seeder ** realizado en la versión de Laravel 8

PostFactory.php

<?php

namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;

class PostFactory extends Factory
{   
    protected $model = Post::class;
   
    public function definition()
    {
        return [
            'user_id' => 1,
            'title' => $this->faker->sentence,
            'body' => $this->faker->sentence(800)
        ];
    }
}

DatabaseSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{   
    public function run()
    {
        // \App\Models\User::factory(10)->create();
        \App\Models\User::create([
            'name' => 'Jhon Fabio Cardona',
            'email' => '[email protected]',
            'password' => bcrypt('12345678')
        ]);

        \App\Models\Post::factory(24)->create();
    }
}

Finalmente en la consola ejecutamos

php artisan migrate:refresh --seed

Solución para los que tengan problema con la columna slug. Yo usé Laravel 8.5.24. Leí la documentación del paquete cviebrock/eloquent-sluggable.

El archivo de migración en la sentencia para definir la columna slug debe ir así:

$table->string('slug')->unique()->nullable();

En el archivo app/Models/Post.php, se debe agregar lo siguiente, la clase sluggable y una función:

namespace App\Models;

use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;
    use Sluggable;

    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }
} 

y finalizamos ejecutando el comando migrate:refresh --seed:

php artisan migrate:refresh --seed 

En la base de datos nos debe poner el la columna ‘slug’ lo mismo que en la columna ‘title’ pero ya en minusculas y con guiones para separar palabras.

Creación de tablas, entidades y datos de prueba

  1. Configuración de la migración de La tabla Post
public function up()
    {
        Schema::create('posts', function (Blueprint $table) {

            $table->bigIncrements('id');

            // Creación de la llave foranea de usuarios
            $table->unsignedBigInteger('user_id');

            $table->string('title');
            $table->string('slug')->unique();
            $table->string('image')->nullable();
            $table->text('body');
            $table->text('iframe')->nullable();

            // Crea las columnas de marca de tiempo en laravel created_at y updated_at
            $table->timestamps();

            // creación de relación entre la tabla post y usuarios
            $table->foreign('user_id')
                  ->references('id')
                  ->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
  1. Configuración de Factory de Post
<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Post;
use Faker\Generator as Faker;

$factory->define(Post::class, function (Faker $faker) {
    return [
        /* 
            El factory debe tener una estrecha relación con la tabla
            Faker es un generador de datos de pruba muy util a la hora de testear la app
        */
        
        'user_id' => 1,
        'title' => $faker->sentence,
        'body' => $faker->text(800)
    ];
});
  1. Creación de los datos semilla de mi aplicación para realizar pruebas
public function run()
    {
        /* 
            Creación de un usuario para realizar pruebas.

            Utilizo eloquent directamente debido a que si
            si lo creo medinate factory se crearia un usuario
            aleatorio y no podria probar el sistema ya que no
            sabria el usuario ni la contraseña.
        */

        App\User::create([
            'name' => 'Javier Amaya Patricio',
            'email' => '[email protected]',
            'password' => bcrypt('123456')
        ]);

        /* 
            Creación de 24 posts mediante factory
        */

        factory(Post::class,24)->create();
    }
  1. configuración de la Conexión a la base de datos en el archivo .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=**platzipress**
DB_USERNAME=root
DB_PASSWORD=

  1. Revisión de la conexión a la base de datos usando Tinker antes de ejecutar cualquier migración.

Este Comando abre la consola de tinker la cual nos permite realizar pruebas de funcionamiento

php artisan tinker.

Este comando permite revisar el estado de la conexión con la base de datos, sino hay ningún error nos muestra información de la conexión de lo contrario nos manda una mensaje de error.

DB::connection()->getPdo();
  1. Una vez comprobado que la conexión con la base de datos es correcta, podemos ejecutar las migraciones para poder crear los datos de prueba, para ello corremos el comando:
php artisan migrate:refresh --seed

  1. Resultado de la tabla usuarios:
  1. Resultado de la tabla post:

Excelente, yo manejaré la base de datos con el nombre de “blog” que me parece un nombre más lógico para el proyecto:D

Este curso me encanta, 100% el mejor curso de php en todo platzi sin lugar a duda ❤️

En el factory tuve que realizar unos cambios ya que no me ejecutaba las migracioens con laravel 8:

En el Post:

return [
            'user_id'   => 1,
            'title'     => $this->faker->sentence,
            'body'     => $this->faker->text(800),
        ];

y en el Seeders tuve que usar asi:

\App\Models\Post::factory(24)->create();

Comentarles que lo estoy usando con laravel SAIL con docker

Hola , creo que estaría bien pequeñas “píldoras” con los cambios de versión.
No cambia todo y sería útil un video corto con por ejemplo en este caso los Factories en laravel 8, teniendo ya la base de esta clase.
O el cambio y uso para crear el proyecto con auth y sus nuevas plantillas etc…

Buenas me sigue generando el mismo problema, de que cuando ejecuto el comando refresh con el seed no me genera la tabla posts ni me llena las otras tablas. en las otras practicas tuve que crear los datos manuelmente para poder hacer las practicas.

esto es lo que se ejecuta en mi terminal cuando ejecuto el comando.
cabe destacar que estoy usando git-bash como terminal para el curso y php/myadmin como base de datos, es el unico gestor que tengo.

si me pueden ayudar o sugerir algo antes de continuar, muchas gracias.

Casa@DESKTOP-MBM1C0S MINGW32 /c/xampp/htdocs/laravel/basic-new
$ php artisan migrate:refresh --seed
Migration table not found.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table

   Illuminate\Database\QueryException

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too
long; max key length is 767 bytes (SQL: alter table `users` add unique `users_em
ail_unique`(`email`))

  at C:\xampp\htdocs\laravel\basic-new\vendor\laravel\framework\src\Illuminate\D
atabase\Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll
 format the error
    666|         // message to include the bindings with SQL, which will make th
is exception a
    667|         // lot more helpful to the developer instead of just the databa
se's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673|

  1   C:\xampp\htdocs\laravel\basic-new\vendor\laravel\framework\src\Illuminate\
Database\Connection.php:463
      PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Sp
ecified key was too long; max key length is 767 bytes")

  2   C:\xampp\htdocs\laravel\basic-new\vendor\laravel\framework\src\Illuminate\
Database\Connection.php:463
      PDOStatement::execute()

alguien sabe como solucionar este error, me crea las tablas pero no me inserta los datos

C:\Users\Alvaro Restrepo\Documents\StudyLaravel\blog>php artisan migrate:refresh --seed
Rolling back: 2019_08_19_000000_create_failed_jobs_table
Rolled back:  2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table (0.01 seconds)
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table (0.01 seconds)
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.03 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
Migrating: 2020_05_14_230214_create_posts_table

   Illuminate\Database\QueryException

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'posts' already exists (SQL: create table `posts` (`id` bigint unsigned not null auto_increment primary key, `user_id` bigint unsigned not null, `title` varchar(191) not null, `slug` varchar(191) not null, `image` varchar(191) null, `body` text not null, `iframe` text null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')

  at C:\Users\Alvaro Restrepo\Documents\StudyLaravel\blog\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675|

  1   C:\Users\Alvaro Restrepo\Documents\StudyLaravel\blog\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
      PDOException::("SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'posts' already exists")

  2   C:\Users\Alvaro Restrepo\Documents\StudyLaravel\blog\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
      PDOStatement::execute()

cuando se ejecuta `php artisan migrate:refresh --seed` se obtiene este error: ```txt Symfony\Component\Debug\Exception\FatalThrowableError : syntax error, unexpected '|', expecting variable (T_VARIABLE) at /var/www/html/basic-new/vendor/cocur/slugify/src/Slugify.php:100 96| * @param string|array|null $options Options 97| * 98| * @return string Slugified version of the string 99| */ > 100| public function slugify(string $string, array|string|null $options = null): string 101| { 102| // BC: the second argument used to be the separator 103| if (is_string($options)) { 104| $separator = $options; Exception trace: 1 Composer\Autoload\{closure}("/var/www/html/basic-new/vendor/composer/../cocur/slugify/src/Slugify.php") /var/www/html/basic-new/vendor/composer/ClassLoader.php:427 2 Composer\Autoload\ClassLoader::loadClass("Cocur\Slugify\Slugify") [internal]:0 Please use the argument -v to see more details. ``` ```js ... ``` El problema es la versión de `` `cocur/slugify` ``, la cual es una dependencia de `` `cviebrock/eloquent-sluggable` `` Instala específicamente esta versión: `` `composer require cviebrock/eloquent-sluggable:6.0.2` `` Lo anterior aplica si haces el curso específicamente con Laravel 6. Saludos
cuando se ejecuta `php artisan migrate:refresh --seed` se obtiene este error: ```txt Symfony\Component\Debug\Exception\FatalThrowableError : syntax error, unexpected '|', expecting variable (T_VARIABLE) at /var/www/html/basic-new/vendor/cocur/slugify/src/Slugify.php:100 96| * @param string|array|null $options Options 97| * 98| * @return string Slugified version of the string 99| */ > 100| public function slugify(string $string, array|string|null $options = null): string 101| { 102| // BC: the second argument used to be the separator 103| if (is_string($options)) { 104| $separator = $options; Exception trace: 1 Composer\Autoload\{closure}("/var/www/html/basic-new/vendor/composer/../cocur/slugify/src/Slugify.php") /var/www/html/basic-new/vendor/composer/ClassLoader.php:427 2 Composer\Autoload\ClassLoader::loadClass("Cocur\Slugify\Slugify") [internal]:0 Please use the argument -v to see more details. ``` El problema es la versión de `` `cocur/slugify` ``, la cual es una dependencia de `` `cviebrock/eloquent-sluggable` `` Instala específicamente esta versión: `` `composer require cviebrock/eloquent-sluggable:6.0.2` `` Lo anterior aplica si haces el curso específicamente con Laravel 6. Saludos...

Comparto otra version del factory para el ejercicio.
.
Como aporte:

  • genero primero la sentencia fake y sobre ella aplico la funcion slug.
  • genero user_id de forma aleatoria a partir de la tabla de usuarios (poblada previamente)
  • en las fechas de actualizacion y borrado uso random porque unos campos tienen fechas otros no.
public function definition()
	{
		$title = $this->faker->sentence;
		$slug = Str::of($title)->slug('-');
		$image = "https://loremflickr.com/640/360";

		return [
			// 'user_id' => $this->faker->numberBetween($min = 20, $max = 29),
			'user_id' => User::all()->random()->id,
			'title' => $title,
			'slug' => $slug,
			'image' => $image,
			// 'body' => $faker->text(800),
			'body' => $this->faker->paragraph($nbSentences = 3, $variableNbSentences = true),
			'created_at' => $this->faker->dateTime(),
			'updated_at' => $this->faker->randomElement([
				$this->faker->dateTime(), null
			]),
			'deleted_at' => $this->faker->randomElement([
				$this->faker->dateTime(), null
			]),
		];
	}

Para el siguiente error:

Exception trace:

 1   PDOException::("SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'posts' already exists")
  • solución:

Paso 1
php artisan migrate:reset

Paso 2

Vaya a su base de datos usando PHPmyadmin (o similar) y elimine todas las tablas restantes, incluida la tabla de migración.

Paso 3
php artisan migrate

Laravel 7 works command

      composer require cviebrock/eloquent-sluggable 7.00 

General error: 1364 Field ‘slug’ doesn’t have a default value")
Los que tengan ese error pueden solucionarlo colocando en el PostFactory:
public function definition()
{
$title = $this->faker->sentence();
return [
‘user_id’=>1,
‘title’=>$title,
‘slug’=>Str::slug($title,’-’),
‘body’=>$this->faker->text(800)
];
}

Este error me general por el campo slug no me permite ingresar datos. Asi que tuve que agregar la funcion de nullable. Espero ayude alguien que tenga el mismo error.

Para los campos que son llaves foraneas también pueden usar la siguiente propiedad para que sea mas legible y rápido de hacer:

$table->foreignId('user_id');

Esta propiedad de arriba es un shortcut para no tener que todo escribir esto:

$table->unsignedBigInteger('user_id')

Si desean conocer más a fondo sobre las propiedades que nos provee laravel a la hora de crear campos de base de datos les dejo el siguiente enlace aquí 😄

Les recomiendo que si estan en laravel 8 creen mejor un proyecto en laravel 7, puede que se confundan y les de la impresion de que laravel es complicado cuando realmente es una maravilla.
Después de este curso tomen laravel 8, verán muy buenas mejoras en el framework.

#NuncaParesDeAprender

la creacion de la tabla de posts quedaria asi:

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id')->unsigned();
            $table->unsignedBigInteger('user_id');

            $table->string('title');
            $table->string('slug')->unique();

            $table->string('image')->nullable();

            $table->text('body');
            $table->text('iframe')->nullable();

            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');
        });
    }

para los que tuvieron este error:
Method foreing does not exist.
hay un pequeño error en la linea
Agreguen esta linea en create post
$table->foreign(‘user_id’)->references(‘id’)->on(‘users’);
la solucion está en cambiar el foreing por foreign

Excelente explicación para crear un proyecto de 0

El método unsignedBigInteer en la creación de campos sirve para determinar que el campo que se creara no tendrá números negativos y será un numero grande

Alguien me puede decir, que es lo que establece la función unsigned()?

¿Cómo se puede agregar una llave foránea como alteración y no en el momento de la creación de la tabla?

no recuerdo que en clases pasadas del curso hayan hecho mención a esto, pero en caso hayan notado alguna discrepancia en la hora de creación / actualización de los registros en la BD, pueden hacer el ajuste correspondiente en la llave timezone del archivo config/app.php del Laravel. Para la lista de zonas horarias admitidas pueden ver el siguiente enlace: https://www.php.net/manual/en/timezones.php

Excelente clase, se explico como crear las tablas, preparar el factory y por último los datos semilla de las tablas.

Amigos les comparto el enlace donde encuentran todos los tipos de columnas para una migración en laravel Migration Columns

Coool !

una forma de crear un usuario en seed es:

$user = new User();
        $user->name = 'jose Luis';
        $user->email = '[email protected]';
        $user->password = bcrypt('123456789');

        $user->save();

Ya resolví el problema, me faltaba agregar:
use Sluggable en el modelo de Post

Excelente curso, es la primera vez que pruebo laravel y me está gustando. El único problema es que a la hora de realizar la migración me genera un error indicando que tanto el campo slug como el campo body no tienen un valor por defecto. La primera solución que pensé fué poner esos campos como nulos pero el problema es que el slug ya no coincide con el titulo (que es finalmente lo que se busca)

me daba un error con el sluggable
por lo que le agregue en el modelo de post
public function sluggable(): array
{
return [
‘slug’ => [
‘source’ => ‘title’,
‘onUpdate’=> true
]
];
}
y ya no me salio el error

Para el error que dice que la columna user_id está duplicada en la tabla post hice esto:
Eliminé la bd, la creé de nuevo y dejé migratios de posts así

        Schema::create('posts', function (Blueprint $table) {
            $table->id();

            //$table->unsignedBigInteger('user_id');
            
            $table->string('title');
            $table->string('slug')->unique();

            $table->string('image')->nullable();

            $table->text('body');
            $table->text('iframe')->nullable();

            $table->timestamps();

            $table->foreignId('user_id');
        });
            'titulo'=>  $faker->text(10),
            'contenido' => $faker->text(70),
            'user_id' => factory(App\User::class),

‘user_id’ => factory(App\User::class) para Obtener el Id de los usuarios ya registrados

si que me dió problema esto por las versiones de Laravel respecto a la creación de los datos para la base y el slug… revisando los comentarios y la pagina de laravel por fin resulto la creación de los datos y resolver lo de los datos raiz…lo siguiente pueden probar en su proyecto.

<h3>DataBaseSeeder.php</h3>

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

use Illuminate\Support\Facades\DB;//aumentamos
use Illuminate\Support\Facades\Hash;//aumentamos
use Illuminate\Support\Str;//aumentamos
use App\Models\User;//aumentamos
use App\Models\Post;//aumentamos

class DatabaseSeeder extends Seeder
{
/**
* Seed the application’s database.
*
* @return void
*/
public function run()
{
User::create([
‘name’ => ‘Italo Morales F’,
‘email’ => ‘[email protected]’,
‘password’ => bcrypt(‘123456’)
]);

    Post::factory()->count(24)->create();
}

}
y en el archivo PostFactory.php

<?php

namespace Database\Factories;

use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;

use Illuminate\Support\Str; //aumentamos

class PostFactory extends Factory
{
/**
* The name of the factory’s corresponding model.
*
* @var string
*/
protected $model = Post::class;

/**
 * Define the model's default state.
 *
 * @return array
 */
public function definition()
{
    return [
        'user_id'   => 1,
        'title'     => $this->faker->sentence,
        'body'      => $this->faker->text(800),
    ];
}

}

Archivo Post.php del slug
<?php

namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
class Post extends Model
{
use HasFactory;

 use Sluggable;
/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable()
{
    return [
        'slug' => [
            'source' => 'title',
            'onUpdate'=> true 
        ]
    ];
}

}
espero les sirva…

Si les sale un error, al crear los Posts, con los factory, es que este atributo, ‘body’ => $faker->text(80), debe ser de un tamaño mas corto.