使用Laravel Eloquent关系从第二个表中获取数据

时间:2017-05-18 20:35:33

标签: php mysql laravel laravel-5

我有表usersgender

在性别表中,有idname(男/女)

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
        }
    ]
}

2 个答案:

答案 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'];