Почему общая сумма показывает 40, а не 20? - PullRequest
0 голосов
/ 04 июля 2018

В конференции участвует 1 регистрация с 2 участниками, поэтому база данных выглядит следующим образом.

стол регистрации

id     conference_id      user_that_did_registration
1         1                           1

стол участников

id   registration_id     registration_type_id
4           4                   1   
5           4                   1

таблица типов регистрации

id     name     conference_id      price
1     general           1           10

Я хочу получить общую стоимость регистрации с идентификатором «1», которая должна составлять 20, потому что есть 2 участника, каждый из которых связан с типом регистрации «1», который имеет цену 10.

У меня есть этот код, но дд (всего $) показывает 40 вместо 20. Знаете почему?

$registrationTypeDetails = Registration::with(['participants.registration_type',
    'participants' => function ($query) use ($regID) {
        $query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
    }
])->find($regID);


if ($registrationTypeDetails->user_that_did_registration != $user_id) {
    return redirect('/');
} else {
    $total = 0;
    $type_counts = [];
    foreach ($registrationTypeDetails->participants as $p) {
        $name = $p->registration_type->name;
        if (!isset($type_counts[$name])) {
            $type_counts[$name] = 0;
        }
        $type_counts[$name]++;
    }

    dd($registrationTypeDetails->participants);

    foreach ($registrationTypeDetails->participants as $participant) {
        $total += $participant->registration_type->price * $type_counts[$name];
    }

    dd($total); // shows 40 not 20
}

Показывает $ registrationTypeDetails:

Registration {#290 ▼
  #relations: array:1 [▼
    "participants" => Collection {#299 ▼
      #items: array:2 [▼
        0 => Participant {#306 ▼
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#311 ▶}
          ]
        }
        1 => Participant {#308 ▼
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#311 ▼
              #attributes: array:11 [▼
                "id" => 1
                "name" => "general"
                "price" => 10
                "conference_id" => 1
              ]
            }
          ]
        }
      ]
    }
  ]
}

1 Ответ

0 голосов
/ 04 июля 2018

Попробуйте это один раз, предполагая, что у вас есть hasMany отношение между Registration и Participant. Аналогично Participant имеет отношение belongsTo с RegistrationType

$registration = Registration::with('participants', 'participants.registration_type')->find($regID);

$totalPrice = $registration->participants->sum(function ($participant) {
    return $participant->registration_type->price;
});

echo $totalPrice;

Сумма коллекции Laravel https://laravel.com/docs/5.6/collections#method-sum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...