6

我试图在“用户”表和“用户配置文件”表之间建立一个非常简单的关系。每个用户都有一个 user_profile,所以它是一个简单的一对一。根据@ http://four.laravel.com/docs/eloquent#one-to-one找到的文档,我已将以下功能添加到我的用户模型中:

public function user_profile()
{
    return $this->hasOne('User_profile');
}

这是我的 User_profile 模型中定义的关系:

public function user()
{
    return $this->belongsTo('User');
}

我正在尝试像这样从控制器访问:

    // 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;

不幸的是,打印 $user 可以很好地打印出 User 模型字段,但没有显示任何关系痕迹;$profile 为空。'relations' 数组也是空的,我猜它可能应该被填充。

我正在尝试使用此处建议的“动态属性” http://four.laravel.com/docs/eloquent#dynamic-properties

否则,如果我只是去:

echo "User's name is: " . $user->user_profile()->first()->first_name . ' ' . $user->user_profile()->first()->last_name;

它有效..但我真的不喜欢这样做。

有什么建议么?

4

1 回答 1

7

好的,所以问题与在类名中使用下划线有关。Laravel 遵循此处概述的 PSR 0 和 1 。

这意味着我必须为我的模型类和文件名 UserProfile 命名(即使我的 MySql 表名为'user_profiles'),然后更新我的用户模型以具有一个名为 userProfile() 的函数。

更新命名后,我可以通过执行以下操作自动访问关系:

$user = Auth::user();
echo $user->userProfile->first_name;
于 2013-06-02T23:47:06.100 回答