Laravel вычислить и игнорировать нулевое значение - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь выполнить вычисление на моем контроллере. У меня есть эта проблема. Как игнорировать, если один из столбцов равен NULL, например, как Excel обрабатывает пустую ячейку.

$data = $request->input('datas'); //here scores is the input array param 
foreach($data as $row){ 
    $grade = Grade::find($row['id']); 
    $grade->final_average =round( ($row['term1_result'] + $row['term2_result'] + $row['term3_result'] + $row['term4_result'])/4);

, если один из RESULT пуст, он будет игнорировать и вычислять только оставшийся результат так же, как Excel.

Найдено решение

Здравствуйте, ребята! Я нашел ответ на эту проблему извините Если вы беспокоитесь, ребята, я опубликую ответ ниже для справки, если у кого-то есть проблемы, я использую этот маленький маленький код в конце. ?: null так что это окончательный код

$data = $request->input('datas'); //here scores is the input array param 
foreach($data as $row){ 
    $grade = Grade::find($row['id']); 
    $grade->final_average =round( ($row['term1_result'] + $row['term2_result'] + $row['term3_result'] + $row['term4_result'])?: null/4);

Спасибо за вашу помощь, ребята! .. Цените это.

Ответы [ 3 ]

0 голосов
/ 09 января 2020

Попробуйте это

$data = $request->input('datas');
foreach($data as $row){ 
    $grade = Grade::find($row['id']); 
    $grade = new Grade();
    $sum = $row['term1_result'] + $row['term2_result'] + $row['term3_result'] + $row['term4_result'];
    $grade->final_average = round($sum/4);
    $grade->save();
0 голосов
/ 09 января 2020

Попробуйте это:

foreach($data as $row){
    $keys = ['term1_result', 'term2_result', 'term3_result', 'term4_result'];
    $sum = 0;
    $count = 0;
    foreach($keys as $key) {
        if ($row[$key] !== NULL) {
           $count += 1;
           $sum += $row[$key];
        }
    }
    $final_average = $count > 0 ? round($sum / $count) : 0; 
}
0 голосов
/ 09 января 2020

Возможно, лучший способ справиться с этим - использовать COALESCE в вашем запросе SQL, например,

SELECT
    ...,
    COALESCE(term1_result, 0) As term1_result,
    COALESCE(term2_result, 0) As term2_result,
    COALESCE(term3_result, 0) As term3_result,
    COALESCE(term4_result, 0) As term4_result
FROM yourTable
...

Тогда значение NULL будет просто заменено на ноль.

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