Adquiere este curso para tener acceso a todas las lecciones
Comprar curso94. 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 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 hace 11 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 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 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 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”
-