Php 从具有Laravel雄辩关系的第二个表中获取数据

Php 从具有Laravel雄辩关系的第二个表中获取数据,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我有表用户和性别 性别表中有id和name(男/女) 在users表中有gender\u id 我需要从users表中获取json数据,并根据连接的id从gender表中获取gender name。使用当前代码,我可以为所有用户获得正确的gender\u id,但也可以获得gender:null。如何在json中显示性别表中的姓名 这就是我所拥有的: 用户模型 public function Gender() { return $this->hasOne('App\Gender',

我有表
用户
性别

性别表中有
id
name
(男/女)

users
表中有
gender\u id

我需要从users表中获取json数据,并根据连接的id从gender表中获取gender name。使用当前代码,我可以为所有用户获得正确的
gender\u id
,但也可以获得
gender:null
。如何在json中显示性别表中的姓名

这就是我所拥有的:

用户模型

public function Gender()
{
    return $this->hasOne('App\Gender', 'id');
}
public function User()
{
    return $this->hasMany('App\User', 'gender_id');
}
public function Gender()
{
    return $this->belongsTo('App\Gender', 'gender_id', 'id);
}
public function Users()
{
    return $this->hasMany('App\User', 'gender_id', 'id);
}
性别模型

public function Gender()
{
    return $this->hasOne('App\Gender', 'id');
}
public function User()
{
    return $this->hasMany('App\User', 'gender_id');
}
public function Gender()
{
    return $this->belongsTo('App\Gender', 'gender_id', 'id);
}
public function Users()
{
    return $this->hasMany('App\User', 'gender_id', '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
        }
    ]
}

我想你在找我

如果是你的话,我应该去看医生

例如:

public function getGenderNameAttribute()
{
    return ($this->gender) ? $this->gender->name : null;
}
然后你可以做
$user->gender\u name

如果您希望在答复中提供此信息,您可以在模型中执行以下操作:

 protected $appends = ['gender_name'];

通常,用户只有一种性别。这样,您就为以后要调用的模型设置了一个
gender\u id
。要获得性别,您可能需要将用户表上的性别id,
gender\u id
转换为真实的模型。因此,
belongsTo
应该是正确的

用户模型

public function Gender()
{
    return $this->hasOne('App\Gender', 'id');
}
public function User()
{
    return $this->hasMany('App\User', 'gender_id');
}
public function Gender()
{
    return $this->belongsTo('App\Gender', 'gender_id', 'id);
}
public function Users()
{
    return $this->hasMany('App\User', 'gender_id', 'id);
}
根据我的逻辑思维,一个性别可以被许多用户所拥有,也可以有许多用户或类似的短语

性别模型

public function Gender()
{
    return $this->hasOne('App\Gender', 'id');
}
public function User()
{
    return $this->hasMany('App\User', 'gender_id');
}
public function Gender()
{
    return $this->belongsTo('App\Gender', 'gender_id', 'id);
}
public function Users()
{
    return $this->hasMany('App\User', 'gender_id', 'id);
}

我在方法中添加了额外的
s
,以便更好地命名约定。

我认为您的关系应该是
用户与性别的关系,而不是
hasOne
我还有其他问题。是否可以在模型中声明我要获取的列?例如,如果性别表在
id
name
旁边有列
status
,我想从结果中排除该状态。类似这样的情况?