从数据表中获取一个关联记录

3

我正在使用 Laravel v8

我有3个模型:Family(家庭)、FamilyMember(家庭成员)、FamilyRelationship(家庭关系)

家庭表:

id address created_at updated_at
1 测试地址 NULL NULL

家庭关系表:

id name created_at updated_at
1 家长 NULL NULL
2 配偶 NULL NULL
3 孩子 NULL NULL

家庭成员表:

id first_name last_name family_id family_relationship_id
1 约翰 1 1
2 1 2
3 马克斯 1 3
4 玛丽 1 3

我在 Family 模型中创建了关联:

public function members(){
   return $this->hasMany(FamilyMember::class, 'family_id');
}

在Family Member模型中,家庭关系被定义为家庭成员之间的关系。

public function familyrelationship()
{
    return $this->belongsTo(FamilyRelationship::class, 'family_relationship_id');
}

我正在使用Datatable展示家庭信息,包括家庭的负责人。
我想从Family模型中显示id和address列,以及从Family Member模型中显示first_name和last_name列,其中家庭成员关系为Head。
如何通过建立关系来在可搜索的Datatable网格中仅显示家庭负责人的详细信息?
虽然可以使用Eloquent JOINs轻松实现上述操作,但我想知道是否可以利用Laravel提供的关系功能实现。

1
你到目前为止尝试了什么? - Masudul Hasan Shawon
1个回答

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 只会取第一个结果...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接