Laravel Eloquent - 从只有一个 child 的 parents 中获取结果

Laravel Eloquent - Get results from parents that has only one child

我正在尝试获取与某个 child id 匹配的所有结果,并且 parent 仅在 child 上有。我最初的想法是用嵌套的 foreach 手动完成,但有没有更简单的方法?

我的parent叫Proyectos然后我有一个支点table叫PaisBeneficiarioProyecto,另一个parent是PaisBeneficiario .这是一个 many-to-many 关系。

$monto_pais = Proyecto::all()->where('pais_beneficiarios', $id)->sum('monto_aprobado');

上面解释的代码符合您的预期,但这不是我需要的结果。 这是我的模型:

Proyectos:

public function pais_beneficiarios()
    {
        return $this->belongsToMany(\App\Models\PaisBeneficiario::class, 'pais_beneficiario_proyecto', 'id_proyecto', 'id_pais_beneficiario')
                    ->withPivot('monto_beneficio');
    }

PaisBeneficiario:

public function pais_beneficiario()
    {
        return $this->belongsTo(\App\Models\PaisBeneficiario::class, 'id_pais_beneficiario');
    }

    public function proyecto()
    {
        return $this->belongsTo(\App\Models\Proyecto::class, 'id_proyecto');
    }

PaisBeneficiarioProyectos:

public function proyectos()
    {
        return $this->belongsToMany(\App\Models\Proyecto::class, 'pais_beneficiario_proyecto', 'id_pais_beneficiario', 'id_proyecto')
                    ->withPivot('monto_beneficio');
    }

我要求和的值称为 monto_aprobado,它位于 Proyectos

下面的查询为您提供 Proyecto 个模型的 monto_aprobado 字段的总和,这些模型只有一个 pais_beneficiarios_count

Proyecto::withCount('pais_beneficiarios')
    ->having('pais_beneficiarios_count', 1)
    ->sum('monto_aprobado');