Se puede hacer el llamado a los modelos asi tambien:
use App\Models\{User, Category, Course, Post};
Introducción
¡Actualizamos este curso!
Qué aprenderás sobre Laravel 8
Laravel 6
Jetstream
Proyecto con Laravel 8
¿Qué vamos a construir?
Configuración inicial
Factories y Seeders
Index y Layout: estructura inicial
Index y Layout: definiendo estructura HTML
Index y Layout: complementar estructura
Componente Livewire
Livewire: diseño del componente
Página de curso individual
Detalle del curso
Listado de lecciones
Cursos similares
Componentes
Panel administrativo
Conclusión
Repaso final
Despedida
Bonus
Aprendiendo PHP y Laravel
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Profesor Italo Morales F
Aportes 31
Preguntas 7
Se puede hacer el llamado a los modelos asi tambien:
use App\Models\{User, Category, Course, Post};
Algo curioso de Laravel es que en versiones anteriores tu recibias al componente Faker
por medio de la inyección de dependencias, ahora en Laravel 8 faker está implicito en las factories 😄
.
Pueden generar muchos tipos de datos de prueba, aquí está la documentación oficial de Faker:
.
https://github.com/fzaninotto/Faker
.
Les recomiendo instalar las extensiones de PHPIntelliSense y PHPIntelephense en VSCode para que se hagan auto imports de los namespaces en PHP ^^
Como aporte extra, también se pueden crear seeders para cada una de las entidades (UserSeeder, PostSeeder, etc) sin embargo esta practica es mas útil si quiere agregar datos ya definidos.
En el ejemplo que coloco, defino ya a un administrador y su contraseña, y aquí mismo defino el Factory, y ya desde el DatabaseSeeder llamo a este Seeder así como normalmente lo hace el profesor con los factory.
Una forma más segura de asociar claves foráneas en Factories sería asignando ID’s aleatorios según los registros ya existentes en la base de datos en lugar de números aleatorios. Así, en caso de que quieras cambiar la cantidad de registros creados en los seeders, o usar ID’s con formato uuid en tus migraciones; tus Factories seguirán funcionando sin necesidad de modificar el código en varios lugares. Por ejemplo:
–
CourseFactory.php
CategoryFactory
public function definition()
{
return [
'name' => $this->faker->word
];
}
CourseFactory
public function definition()
{
return [
'name' => $this->faker->sentence,
'slug' => $this->faker->slug,
'image' => $this->faker->imageUrl(1280,720),
'description' => $this->faker->text(800),
'user_id' => rand(1,5),
'category_id' => rand(1,3)
];
}
PostFactory
public function definition()
{
return [
'name' => $this->faker->sentence,
'free' => rand(0,1),
'course_id' => rand(1,10)
];
}
Los datos Seed ( o datos semilla) vendría siendo información falsa inicial en nuestras tablas.
No importa el orden que especifiquemos en un factory.
Comando para crear las tablas en la base de datos:
php artisan migrate
Comando para borrar y volver a crear las tablas en la base de datos más los datos falsos:
php artisan migrate:fresh --seed
Si tuvieron el error de “Specified key was too long error”, solución:
‘mysql’ => [
…
‘engine’ => ‘InnoDB’,
]
database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
use App\Models\User;
use App\Models\Category;
use App\Models\Course;
use App\Models\Post;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
User::factory(5)->create();
Category::factory(3)->create();
Course::factory(10)->create();
Post::factory(90)->create();
}
}
Solución:
$table->longText('description');
Por si a alguien mas le salta error al correr el último seed, a mi me daba error porque no tenía instalado sanctum:
composer require laravel/sanctum
Tengo mas opiniones sobre cada uno de estos elementos:
.
Seeders (en espanol sembradores)
.
.
Factories (en espanol fabricas)
.
Seeders → Son los que crean los datos de información falsa.
Factories → Es la estructura de los datos.
para los que usan postgresql, la configuración básica es esta:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=jlivewire8
DB_USERNAME=postgres
DB_PASSWORD=postgres
donde:
DB_DATABASE ="nombre de BD"
DB_USERNAME="Usuario de la BD"
DB_PASSWORD=“Contraseña”
si usan** Visual Studio Code**, les recomiendo la extensión
PHP Namespace Resolver y al hacer clip derecho sobre una clase te da la opción Import Class te agrega la linea use que necesitas.
Si les sale un error al migra en la tabla Users esta es la solución:
https://aprendible.com/blog/como-solucionar-el-error-specified-key-was-too-long-error-en-laravel
Al realizar las “migrations” me daba un error por lo que leyendo la documentacion pude solucionarlo de esta manera (Idem para migrations de posts)
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('category_id')->references('id')->on('categories');
También aporto lo que encontré por si a alguien le sirve.
Laravel también brinda soporte para crear restricciones de foreign keys, que se utilizan para forzar la integridad referencial en el nivel de la base de datos. Por ejemplo, definamos una columna user_id en la tabla de publicaciones que haga referencia a la columna id en una tabla de usuarios:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
Dado que esta sintaxis es bastante detallada, Laravel proporciona métodos adicionales y breves que usan convenciones para brindar una mejor experiencia de desarrollador. Al usar el método ForeignId para crear su columna, el ejemplo anterior se puede reescribir así:
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')->constrained();
});
Debemos tener más cuidado en completar las sentencias y transmitir más claramente los conceptos.
Mi aporte, complementando el de la clase anterior:
si les da este error:
SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name '' (SQL: alter table `courses` add constraint `courses_category_id_foreign` foreign key (`category_id`) references `` (`categories`))
cambian la relacion, a mi me funciono asi:
$table->foreign('category_id')->references('id')->on('categories');
luego dio este error:
SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name '' (SQL: alter table `posts` add constraint `posts_course_id_foreign` foreign key (`course_id`) references `` (`courses`))
de igual manera, cambiamos la relacion y funciona:
$table->foreign('course_id')->references('id')->on('courses');
Si sale esto es porq en description se puso 800 y en la bd esta con varchar(255) solo modifiquen la descripction a text(200) o algo menor q 255
Para los que no quieren usar PHPmyadmin o Mysqlworkbench puede usar la extensión de vsc Mysql de cweijan, en el siguiente enlace pueden ver una overview de como funciona esta extensión
public function definition()
{
return [
'name' => $this->faker->sentence,
'free' => rand(0,1),
'course_id' => rand(1,10)
];
}
public function definition()
{
return [
'name' => $this->faker->sentence,
'slug' => $this->faker->slug,
'image' => $this->faker->imageUrl(1280,720),
'description' => $this->facker->text(800),
'user_id' => rand(1,5),
'category_id' => rand(1,3)
];
}
Consulta, porque cuando hago la migración me envía este error:
Illuminate\Database\QueryException
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table users
add unique users_email_unique
(email
))
en los factories que tienen una relación con otra tabla, no lo recomendaría como se lo ha hecho en el video, lo recomiendo de esta forma 👇
'teacher_id' => factory(Teacher::class),
$table->timestamps(); me ocurrio un error y fue porque no puse esta linea de codigo al final de la funcion
en el caso de los factories, cuando realices TDD lo mejor es utilizar factory para las relaciones
'user_id' => User::factory()->create()->id ```
asi no tienes que preocuparte por si existe o no el usuario
Si en algún punto del desarrollo estoy listo para usar la aplicación en producción y quisiera limpiar los datos semilla de las tablas, como se haría? Correría las migraciones con fresh
?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?