Relación Uno a Uno
Comprar curso

94. Relación Uno a Uno

En este capítulo, aprenderás cómo establecer una relación Uno a Uno en Laravel 10 entre dos modelos de la base de datos. Descubre cómo definir la relación y cómo acceder a los datos relacionados.


5 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    Cuando trabajas con Laravel 10, es común necesitar establecer relaciones entre los modelos de la base de datos. Una de estas relaciones es la relación Uno a Uno, donde un registro de un modelo está relacionado con un solo registro de otro modelo. En este capítulo, aprenderás cómo establecer una relación Uno a Uno en Laravel 10 y cómo acceder a los datos relacionados.

    Para establecer una relación Uno a Uno en Laravel 10, debes definir dos modelos y una clave foránea en uno de ellos que haga referencia al otro modelo. Por ejemplo, supongamos que tienes dos modelos "Usuario" y "Perfil", donde cada usuario tiene un único perfil. En el modelo "Usuario", debes agregar la siguiente función para definir la relación:

    namespace App\Models;
    use Illuminate\Database\Eloquent\Model;
    class Usuario extends Model
    {
       public function perfil()
       {
           return $this->hasOne(Perfil::class);
       }
    }

    En este ejemplo, la función "perfil()" utiliza el método "hasOne()" para definir la relación Uno a Uno entre el modelo "Usuario" y el modelo "Perfil". Laravel asume que la clave foránea para esta relación es "usuario_id" en la tabla "perfiles".

    A continuación, en el modelo "Perfil", debes agregar una función que haga referencia a la relación inversa. Esta función es necesaria para acceder a los datos del usuario relacionado desde el perfil. Por ejemplo:

    namespace App\Models;
    use Illuminate\Database\Eloquent\Model;
    class Perfil extends Model
    {
       public function usuario()
       {
           return $this->belongsTo(Usuario::class);
       }
    }

    En este ejemplo, la función "usuario()" utiliza el método "belongsTo()" para definir la relación inversa Uno a Uno entre el modelo "Perfil" y el modelo "Usuario". Laravel asume que la clave foránea para esta relación es "usuario_id" en la tabla "perfiles".

    Ahora que has definido la relación Uno a Uno en tus modelos, puedes acceder a los datos relacionados utilizando la función correspondiente. Por ejemplo, para obtener el perfil de un usuario en particular, puedes hacer lo siguiente:

    $usuario = Usuario::find(1);
    $perfil = $usuario->perfil;

    En este ejemplo, la variable "$usuario" contiene un objeto de modelo "Usuario" con el ID 1. La variable "$perfil" contiene el perfil asociado al usuario.

    En resumen, establecer una relación Uno a Uno en Laravel 10 es fácil. Solo necesitas definir las funciones "hasOne()" y "belongsTo()" en los modelos correspondientes y una clave foránea en uno de ellos que haga referencia al otro modelo. Una vez que has establecido la relación, puedes acceder a los datos relacionados utilizando las funciones correspondientes.

  • Michael Andrs Ardila Rotavista

    Michael Andrs Ardila Rotavista hace 10 meses

    Buenas tardes

    No se por que al agregarle los parámetros en el orden que muestras en el video no me funciono y tuve que hacerlo de la siguiente forma:

      public function category(){

            return $this->hasOne('App\Models\Category','id','categories_id');

        }

    Otro problema que tuve al no pasarle el método get() me salia un error, tuve que agregarlo 
    Route::get('/prueba', function(){

         $product = Product::find(106)->category()->get();

            return $product;

        });

  • Jaime Salazar

    Jaime Salazar hace 1 año

    buenas noches

    Porque en models user.php, hasta que no comente //use Symfony\component\httpKernel\Profiler\profile, que yo no lo puse y puse use App\Models\profile, me daba error, gracias

    • Victor Arana Flores hace 1 año

      Hola Jaime, no entiendo a que linea te refieres.

      Por defecto no existe esa linea en el modelo User

    • Jaime Salazar hace 1 año

      gracias por responder, es cierto en otros proyectos no figura esa linea de Symfony\…, en el archivo de models/user.php, no me explico como se creo.

  • Fernando Garcia

    Fernando Garcia hace 1 año

    Buenas tardes 
    A mi me manda el tinker

     $profile = Profile::first();
     

      Error  Class "Profile" not found.

    • Victor Arana Flores hace 1 año

      Has creado el modelo Profile? Y de haberlo hecho lo hiciste cuando tinker ya se encontraba abierto?

      De ser así cierra tinker y vuelvelo a abrir.

    • Bernal Fuentes hace 1 año

      $profile = App\Models\Profile::first();

  • Cristian Dominguez

    Cristian Dominguez hace 1 año

    Buenas profe, como voy a saber cuál tabla va ser la que manda? Por ejemplo la que manda es la de users, y se incluye su id en profiles, pero también podría ser que en la tabla de users se agregue el campo profile_id? Cual es más correcto y por que?

    • José Sánchez hace 1 año

      Creo que depende, si queremos que un user solo tenga un profile, ponemos la llave foránea “profile_id” en la tabla "users", caso contrario que el user tenga varios profiles hay que colocar la llave foránea “user_id” en la tabla “profiles”