【问题标题】: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 提供的关系功能来实现。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: laravel datatable relationship laravel-8 eager-loading


【解决方案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, 只取第一个结果...

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多