Сумма столбца в предложении where в laravel eloquent

#php #laravel #eloquent

#php #laravel #eloquent

Вопрос:

У меня есть модель FamilyMember и модель SubscriptionCharge, при этом плата за подписку взимается за несколько месяцев для каждого члена семьи. Я должен выбрать участников, сумма сборов которых превышает определенную сумму.

 $members=FamilyMember::whereHas('subscription_charge', function ($qq) {
   $qq->where(); // how to check sum of column 'amount' in where
})->get();
 

Как проверить сумму столбца ‘amount’ в условии where

Комментарии:

1. Используете ли вы MySQL?

Ответ №1:

Основываясь на вашем комментарии, обновленный ответ

 $memeber = FamilyMember::query()
    ->join(DB::raw('("SELECT subscription_charge.family_member_id, SUM(subscription_charge.amount) as total_charges FROM subscription_charge GROUP BY subscription_charge.family_member_id HAVING SUM(subscription_charge.amount) > 
AMOUNT_YOU_WANT") as sub_table'), function($join) {
         $join->on('sub_table.family_member_id', '=', 'family_member.id');
    })->get();
 

Примечание: Не проверено

Комментарии:

1. отображение ошибки sql SQLSTATE[HY000]: Общая ошибка: 1111 Недопустимое использование групповой функции (SQL: выберите count(*) в качестве агрегата из family_members того, где существует (выберите * из subscription_charges where family_members . id = subscription_charges . family_member_id и сумма (сумма)> 10))

Ответ №2:

Я думаю, вы могли бы сделать что-то подобное. (Я нахожусь в аэропорту, поэтому не могу это проверить.)

 $members=FamilyMember->join(DB::raw('(SELECT family_member_id, SUM(amount) AS sum_of_charges 
            FROM subscription_charge
            WHERE family_member_id = x
            GROUP BY family_member_id
//                  (or HAVING family_member_id = x ?)
            ) charges'),
        function($join)
        {
           $join->on('FamilyMember.id', '=', 'charges.family_member_id');
        })
       ->select(                
            'FamilyMember.id',
            'charges.sum_of_charges'
        )
        ->where('sum_of_charges', '>', 'Y')
    })->get();