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 7 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 10 meses

    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 10 meses

      Hola Jaime, no entiendo a que linea te refieres.

      Por defecto no existe esa linea en el modelo User

    • Jaime Salazar hace 10 meses

      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”