En esta lección aprenderás a crear un nuevo usuario almacenando sus datos en 2 tablas diferentes (users
y user_profiles
). Para ello utilizaremos Eloquent ORM, Relaciones en Eloquent, Transacciones de base de datos, Form Requests y un poco de TDD con PHPUnit.
Repositorio
Ver el código de esta lección en GitHub
Notas
Recuerda que es en la migración create_user_profiles
donde agregamos la columna bio
:
Schema::create('user_profiles', function (Blueprint $table) { $table->increments('id'); $table->string('bio', 1000) $table->timestamps(); });
En el Curso de Laravel desde cero hablamos sobre las migraciones con Laravel.
En el método validate
especificamos que el campo bio
sea required
(obligatorio) y el campo twitter
sea url
(un dirección URL valida):
$data = request()->validate([ // Otras reglas... 'bio' => 'required', 'twitter' => 'url', ], [ 'name.required' => 'El campo nombre es obligatorio' ]);
Revisa la lección Reglas de validación para la actualización de usuarios con Laravel y TDD para aprender más sobre validación y TDD.
Las llaves foráneas las definimos en la migraciones:
Schema::create('user_profiles', function (Blueprint $table) { // ... $table->unsignedInteger('user_id'); $table->foreign('user_id')->references('id')->on('users'); });
En la lección Crear y asociar tablas usando las migraciones de Laravel explicamos este tema más a fondo.
El método findByEmail
fue creado en el Curso de Laravel 5.5 desde cero.
Las transacciones pueden ser creadas dentro de un controlador, en nuestro caso UserController
, utilizando el método transaction
del facade DB
, colocando toda la lógica dentro de la función anónima:
DB::transaction(function () use ($data) { // Lógica de Eloquent.. });
Para utilizar transacciones debes utilizar el motor InnoDB. En el artículo Motores de Almacenamiento en DBMS derivados de MySQL hablamos sobre qué es InnoDB.
Dentro de nuestros Form Requests podemos crear métodos adicionales como por ejemplo save
o createUser
y dentro colocar la lógica para guardar un usuario y su perfil, es simplemente una alternativa si quieres reducir el código del controlador o reusar el código en más de un controlador:
public function save() { User::createUser($this->validated()); }
En el artículo Cómo trabajar con Form Requests en Laravel hablamos a fondo sobre este tema.
Material relacionado
- Creación de tablas con el sistema de migraciones de Laravel
- Uso de múltiples reglas de validación en Laravel
- Usando Eloquent ORM de forma interactiva con Tinker
- Configuración y uso de base de datos en el entorno de pruebas automatizadas con Laravel y PHPUnit
- Transacciones de bases de datos MySQL en PHP
- Nueva forma de validar peticiones y obtener datos en Laravel 5.5
- Curso de Laravel 5.5 desde cero
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Videotutorial: actualicemos un proyecto de Laravel 5.5 a la versión 5.6 Lección siguiente Trabajar con campos opcionales en Laravel