with relations relaciones relacion muchos hasone hasmany hacer example laravel laravel-4 eloquent

laravel - relations - Eloquent hasOne vs belongsTo degenera a la misma función si se especifican ambas claves?



uno a muchos en laravel (1)

Sí, funciona en algunos casos para especificar las claves y hacer que la relación funcione. Y en algunos casos me refiero principalmente a la recuperación de resultados. Aquí hay un ejemplo:

DB

users profiles ----- -------- id id etc... user_id etc...

Modelos

Usar relaciones "incorrectas" con hasOne dos veces

class User extends Eloquent { public function profile(){ return $this->hasOne(''Profile''); } } class Profile extends Eloquent { public function user(){ return $this->hasOne(''User'', ''id'', ''user_id''); } }

Consultas

Digamos que queríamos obtener el usuario de un cierto perfil

$profile = Profile::find(1); $user = $profile->user;

Esto está funcionando. Pero no está funcionando como se supone que debe ser. Tratará la clave principal de los users como una clave externa que hace referencia a user_id en los profiles .

Y aunque esto puede funcionar, te meterás en problemas cuando uses métodos de relación más complicados.

Por ejemplo, associate :

$user = User::find(1); $profile = Profile::find(2); $profile->user()->associate($user); $profile->save();

La llamada lanzará una excepción porque HasOne no tiene el método associate . ( BelongsTo tiene BelongsTo )

Conclusión

Mientras que belongsTo y hasOne pueden comportarse de manera similar en algunas situaciones. Ellos claramente no. Interacciones más complejas con la relación no funcionarán y no tiene sentido desde un punto de vista semántico.

En el caso de una relación uno a uno, si especifico completamente las claves en las llamadas a métodos, ¿hay alguna diferencia entre las relaciones hasOne y belongsTo ? O, preguntado de manera diferente, si utilicé hasOne en ambos lados de la relación, ¿sería el mismo resultado?