Panel de Control

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

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

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

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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