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 通过动态属性访问一对一关系