Среднее по модели Laravel не-значений - PullRequest
0 голосов
/ 18 мая 2018

Я ищу лучший способ усреднить значения подмодели в Laravel, но игнорирую некоторые значения.Столбец, который я хочу усреднить, устанавливается как varchar, но содержит либо число от 0 до 10, либо значение «N / A».Мне нужны два средних значения в этом столбце, одно из которых игнорирует значения «N / A», а другое считает значения «N / A» как 0. У меня есть функции, написанные о том, как они будут рассчитывать средние значения, но я надеюсь получить некоторыевведите лучший способ сделать это.

Я хотел бы иметь возможность вызывать эти функции следующим образом:

    $web_scored_tq = $website->scored_tq;
    $web_uscored_tq = $website->unscored_tq;

Функции:

public function scored_tq() {
    $valid_click_ads = $this->valid_click_ads;
    $total = 0;
    $num = 0;

    foreach ($valid_click_ads as $valid_click_ad) {
        if ($valid_click_ad->tq != "N/A") {
            $total += $valid_click_ad->tq;
            ++$num;
        }
    }

    $scored_tq = $total / $num;
}

public function unscored_tq() {
    $valid_click_ads = $this->valid_click_ads;
    $total = 0;
    $num = 0;

    foreach ($valid_click_ads as $valid_click_ad) {
        if ($valid_click_ad->tq != "N/A") {
            $total += $valid_click_ad->tq;
            ++$num;
        } else {
            ++$num;
        }
    }

    $unscored_tq = $total / $num;
}

1 Ответ

0 голосов
/ 18 мая 2018

Я нашел модель Лафавеля getFooAttribute!Я использовал это, чтобы добавить следующие функции к моей модели веб-сайта, и теперь могу вызывать $ website-> scored_tq или $ website-> unscored_tq.

public function getScoredTqAttribute() {
    $valid_click_ads = $this->valid_click_ads;
    $total = 0;
    $num = 0;

    foreach ($valid_click_ads as $valid_click_ad) {
        if ($valid_click_ad->tq != -1) {
            $total += $valid_click_ad->tq;
            ++$num;
        }
    }

    if ( $num != 0 ) {
        $scored_tq = $total / $num;
    } else {
        $scored_tq = '-';
    }
    return $scored_tq;
}

public function getUnscoredTqAttribute() {
    $valid_click_ads = $this->valid_click_ads;
    $total = 0;
    $num = 0;

    foreach ($valid_click_ads as $valid_click_ad) {
        if ($valid_click_ad->tq != -1) {
            $total += $valid_click_ad->tq;
        }
        ++$num;
    }

    if ( $num != 0 ) {
        $unscored_tq = $total / $num;
    } else {
        $unscored_tq = '-';
    }
    return $unscored_tq;
}

Я также изменил структуру данных на целые числа, гдеЗначения «N / A» изменены на -1.

...