我有表users
和gender
在性别表中,有id
和name
(男/女)
在users
表格中有gender_id
我需要根据连接的ID从json获取来自用户表的数据和性别表中的性别名称。使用当前代码,我为所有用户获得了正确的gender_id
以及gender: null
。如何在json中显示性别表中的名称?
这就是我所拥有的:
用户模型
public function Gender()
{
return $this->hasOne('App\Gender', 'id');
}
性别模型
public function User()
{
return $this->hasMany('App\User', 'gender_id');
}
控制器
$users = User::with('Gender')->paginate(5);
return response()->json($users);
json回复
{
"total": 10,
"per_page": 5,
"current_page": 1,
"last_page": 2,
"next_page_url": "http://test.com/user?page=2",
"prev_page_url": null,
"from": 1,
"to": 5,
"data": [
{
"id": 1,
"name": "John",
"surname": "Doe",
"gender_id": 1,
"tel": "987654321",
"email": "john.doe@email.com",
"gender": null
}
]
}
答案 0 :(得分:1)
通常,用户有一个性别。这样,您设置gender_id
以便稍后调用模型。为了获得性别,您可能会将用户表gender_id
上的性别ID 转换到真实模型。因此,belongsTo
应该是正确的。
用户模型
public function Gender()
{
return $this->belongsTo('App\Gender', 'gender_id', 'id);
}
拥有方,根据我的逻辑思维,性别可以由许多用户拥有,或者它可以有许多用户或类似的短语。
性别模型
public function Users()
{
return $this->hasMany('App\User', 'gender_id', 'id);
}
我将额外的s
添加到方法中以获得更好的命名约定。
答案 1 :(得分:0)
我认为您正在寻找model mutators
在你的情况下我应该去accessor
例如:
public function getGenderNameAttribute()
{
return ($this->gender) ? $this->gender->name : null;
}
然后你可以$user->gender_name
如果您希望在回复中提供此功能,则可以在模型中执行此操作:
protected $appends = ['gender_name'];