拉拉维尔:试图建立关系


Laravel: Trying to get relationship

User:

use Illuminate'Auth'UserTrait;
use Illuminate'Auth'UserInterface;
use Illuminate'Auth'Reminders'RemindableTrait;
use Illuminate'Auth'Reminders'RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
    use UserTrait, RemindableTrait;
    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';
    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');
    public function email_preferences()
    {
        return $this->hasOne('EmailPreference');
    }
}

电子邮件首选项:

class EmailPreference extends Eloquent {
    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'email_preferences';
    public function user()
    {
        return $this->belongsTo('User');
    }
}

用户

id PK
first_name
last_name
email

email_preferences

id PK
user_id FK (users.id)
newsletter

我正在尝试显示用户的电子邮件首选项:

$user = Auth::user();
echo '<pre>';
print_r($user->email_preferences);
exit;

我什么也没得到...

听起来你想要这样的东西:

<?php
$user = Auth::user();
echo 'Receive newsletter? ' . ($user->emailPreferences->newsletter ? 'Yes' : 'No');

编辑:

我做了一些挖掘,发现在 Eloquent 函数/属性名称中使用下划线时可能会很棘手。如果消除下划线,事情应该可以正常工作:

<?php
class User extends Eloquent implements UserInterface, RemindableInterface {
    public function emailPreferences()
    {
        return $this->hasOne('EmailPreference');
    }
}

看到这个答案: Laravel 4 雄辩的 ORM 通过动态属性访问一对一关系