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
,我想从结果中排除该状态。类似这样的情况?