从关系中获取数据表的一条记录
Posted
技术标签:
【中文标题】从关系中获取数据表的一条记录【英文标题】:Fetch one record from relationship for Datatable 【发布时间】:2021-12-21 04:17:11 【问题描述】:我正在使用 Laravel v8
我有 3 个模型:Family、FamilyMember、FamilyRelationship
家庭表:
id | address | created_at | updated_at |
---|---|---|---|
1 | test | NULL | NULL |
家庭关系表:
id | name | created_at | updated_at |
---|---|---|---|
1 | Head | NULL | NULL |
2 | Spouse | NULL | NULL |
3 | Child | NULL | NULL |
家庭成员表:
id | first_name | last_name | family_id | family_relationship_id |
---|---|---|---|---|
1 | John | Doe | 1 | 1 |
2 | Jane | Doe | 1 | 2 |
3 | Max | Doe | 1 | 3 |
4 | Mary | Doe | 1 | 3 |
我在 Family 模型中创建了关系
public function members()
return $this->hasMany(FamilyMember::class, 'family_id');
Family Member模型中的Family Relationship关系为
public function familyrelationship()
return $this->belongsTo(FamilyRelationship::class, 'family_relationship_id');
我正在使用 Datatable 来显示家庭信息以及 一家之主
我想显示 Family 模型中的列 id 和 address 以及 first_name 和 last_name 来自 Family Member 模型,其中家庭成员关系为 Head。
应该如何继续建立关系以在可搜索的数据表网格中仅显示户主详细信息?
使用 eloquent JOIN 可以轻松实现上述目标,但我想知道是否可以使用 Laravel 提供的关系功能来实现。
【问题讨论】:
到目前为止你尝试了什么? 【参考方案1】:你可以尝试 whereHas 与 hasOne 混合,建立一个新的关系:
public function members()
return $this->hasMany(FamilyMember::class, 'family_id');
// 然后是你的新关系:
public function head()
return $this->hasOne(FamilyMember::class, 'family_id')->whereHas('familyrelationship',function ($query)
$query->where('name','Head');
);
hasOne
, 只取第一个结果...
【讨论】:
以上是关于从关系中获取数据表的一条记录的主要内容,如果未能解决你的问题,请参考以下文章
Java编程 如何获取从数据库中获取的一条数据中一个一个数据 啊