#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
wherefamily_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();