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

Fetch one record from relationship for Datatable

我正在使用 Laravel v8

我有 3 个模型:Family、FamilyMember、FamilyRelationship

Family table:

id address created_at updated_at
1 test NULL NULL

Family Relationship table:

id name created_at updated_at
1 Head NULL NULL
2 Spouse NULL NULL
3 Child NULL NULL

Family Member table:

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 模型和 [=44] 的 idaddress 列=]first_name和last_name来自家庭成员模型,其中家庭成员关系是.

应该如何继续建立关系以在也可搜索的数据表网格中仅显示户主详细信息?

使用 eloquent JOIN 可以轻松实现以上内容,但我想知道是否可以使用 Laravel 提供的关系功能来实现。

您可以尝试将 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,将只取第一个结果...