从关系中获取数据表的一条记录

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 模型中的列 idaddress 以及 first_namelast_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, 只取第一个结果...

【讨论】:

以上是关于从关系中获取数据表的一条记录的主要内容,如果未能解决你的问题,请参考以下文章

使用JDBC获取数据库中的一条记录并封装为Bean

Java编程 如何获取从数据库中获取的一条数据中一个一个数据 啊

数据库之 表与表之间的关系

数据库之 表与表之间的关系

Laravel - 渴望加载多对多,仅获取一条记录(不是集合)

数据库之 表与表之间的关系