Пишу многоуровневую реферальную систему с рангами. Т.е. 5 уровней и ранги за кол пригласивших, у каждого разный процент отчислений. При регистрации заношу id пригласившего рефералу. Далее при покупке рефералом пакета делаю отчисления
$dataRef = $this->db->column('SELECT ref FROM accounts WHERE id = :id',
['id' => $data['uid']]);
if ($dataRef === false) {
return false;
}
if ($dataRef != 0) {
$refSum = round((($data['amount'] * 15) / 100), 2);
$params = [
'sum' => $refSum,
'id' => $dataRef,
];
$this->db->query('UPDATE accounts SET refBalance = refBalance + :sum WHERE id = :id', $params);
Потом по цепочке человеку на уровень выше
$dataRef2 = $this->db->column('SELECT ref FROM accounts WHERE id = :id', ['id' => $dataRef]);
if ($dataRef2 === 0) {
return false;
}
if ($dataRef2 != 0) {
$refSum = round((($data['amount'] * 10) / 100), 2);
$params = [
'sum' => $refSum,
'id' => $dataRef2,
];
$this->db->query('UPDATE accounts SET refBalance = refBalance + :sum WHERE id = :id', $params);
Вопрос можно ли как-то сделать это элегантнее и сократить код? А то у меня так будет 40 таких кусков, для проверки на уровень и ранг.