Herkese merhaba, benim aşağıdaki resimde olduğu gibi tablolarım var ve ben bu verilere dayanarak yazdığım helper fonksiyonlarını kullanarak kullanıcıya gösteriyorum fakat veri tabanına çok fazla sorgu atıyor. bunu nasıl daha optimize bir şekilde yazabilirim.

`if (!function_exists('questionLength')) {
function questionLength($id): int
{
return TestQuestion::where('testId',$id)->get()->count();
}
}
if (!function_exists('result')) {
function result($id): float
{
$tests = UserAnswer::where('testId',$id)->where('userId',auth()->id())->get();
$result = 0;
foreach ($tests as $test) {
$choiceKey = (bool)QuestionChoiceKey::where('questionId',$test->questionId)->where('choiceId',$test->choiceId)->first();
$choiceKey === true ? $result++ : null;
}
return number_format(100 / $tests->count() * $result,2);
}
}
if (!function_exists('totalResultTrue')) {
function totalCorrect(): int
{
$tests = UserAnswer::where('userId',auth()->id())->get();
$result = 0;
foreach ($tests as $test) {
$choiceKey = (bool)QuestionChoiceKey::where('questionId',$test->questionId)->where('choiceId',$test->choiceId)->first();
$choiceKey === true ? $result++ : null;
}
return $result;
}
}
if (!function_exists('totalInCorrect')) {
function totalInCorrect(): int
{
$tests = UserAnswer::where('userId',auth()->id())->get();
$result = 0;
foreach ($tests as $test) {
$choiceKey = (bool)QuestionChoiceKey::where('questionId',$test->questionId)->where('choiceId',$test->choiceId)->first();
$choiceKey === false ? $result++ : null;
}
return $result;
}
}
if (!function_exists('totalPoint')) {
function totalPoint(): float
{
$tests = UserAnswer::where('userId',auth()->id())->get();
$result = 0;
foreach ($tests as $test) {
$choiceKey = (bool)QuestionChoiceKey::where('questionId',$test->questionId)->where('choiceId',$test->choiceId)->first();
$choiceKey === true ? $result++ : null;
}
return number_format(100 / $tests->count() * $result,2);
}
}
if (!function_exists('totalResultStatus')) {
function totalResultStatus($id): string
{
$tests = UserAnswer::where('testId',$id)->where('userId',auth()->id())->get();
$result = 0;
foreach ($tests as $test) {
$choiceKey = (bool)QuestionChoiceKey::where('questionId',$test->questionId)->where('choiceId',$test->choiceId)->first();
$choiceKey === true ? $result++ : null;
}
return number_format(100 / $tests->count() * $result,2) >= 70 ? 'Başarılı' : 'Başarısız';
}
}`