Próbuję wymodelować dość prostą relację między tabelą "Użytkownicy" i tabelą "User_profiles". Każdy użytkownik ma profil user_profile, więc jest prosty jeden do jednego. Zgodnie z docs znajdując @http://four.laravel.com/docs/eloquent#one-to-one Dodałem następującą funkcję do mojego modelu użytkownika:Laravel 4 Eloquent ORM uzyskujący relację jeden-do-jednego dzięki właściwościom dynamicznym
public function user_profile()
{
return $this->hasOne('User_profile');
}
i jest to zależność zdefiniowane w moim modelu User_profile:
public function user()
{
return $this->belongsTo('User');
}
Próbuję dostęp z taki kontroler:
// Get current user
$user = User::find(Auth::user()->id);
$profile = $user->user_profile;
print_r($user);
print_r($profile);
echo "User's name is: " . $user->user_profile->first_name . ' ' . $user->user_profile->last_name;
Niestety drukowanie użytkownika $ drukuje pola modelu użytkownika, ale nie pokazuje żadnego śladu relacji; $ profil jest pusty. Tablica "relacji" również jest pusta, co, jak sądzę, powinno być wypełnione.
Próbuję użyć „właściwości dynamicznych”, jak sugeruje tutaj http://four.laravel.com/docs/eloquent#dynamic-properties
W przeciwnym razie po prostu przejść:
echo "User's name is: " . $user->user_profile()->first()->first_name . ' ' . $user->user_profile()->first()->last_name;
To działa .. ale ja nie lubię konieczności zrobić .
Wszelkie sugestie?
kocham L4 ale ten aspekt musi złapać dużo ludzi na zewnątrz. Miałem podobny problem, ale w moim przypadku miało to związek z typami produktów i okazało się, że musiałem nazwać metodę relacji 'productType()' zamiast 'producttype()'. Dziękuję za publikację i mam nadzieję, że pomoże to kilku innym. – JamesG
Tak, dodatkowo irytujące jest to, że zmiana nazwy dotyczy obiektów takich jak tabele i powiązane tabele, ale kończy się powrotem do nazwy podkreślenia dla samych pól tabeli, tj. Nazwa_wyjściowa. Ta niekonsekwencja jest lekko irytująca. – John