2016-10-04 2 views
1

Просто хотел понять разницу между двумя упомянутыми версиями, Laravel v.5.2.43 и v.5.2.45.Laravel 5.2.43 vs 5.2.45 (Eloquent Sum возвращает null вместо 0)?

Я наблюдал следующую разницу:

// 5.2.43 
// Returns 0 in case if there nothing with name Coffee 
Product::where('name','Coffee')->sum('weight'); 

// 5.2.45 
// Returns NULL in case if there nothing with name Coffee 
Product::where('name','Coffee')->sum('weight'); 

У меня есть инструмент для составления отчетов, а целые операции рушатся, когда значение возвращается в NULL вместо 0 в предыдущей версии.

Мой запрос здесь в том, что это функция или ошибка? Если функция, есть ли лучшая альтернатива для изменения поведения? Или мне нужно изменить свой код, чтобы принять эту функцию?

ответ

1

Сравнение методов Сумма \ Осветите \ Database \ Query \ Builder (файл, расположенный по адресу: поставщика/Laravel/рамочный/SRC/Осветите/База данных/Query/Builder.php)

Laravel 5.2. 43

/** 
* Retrieve the sum of the values of a given column. 
* 
* @param string $column 
* @return float|int 
*/ 
    public function sum($column) 
    { 
     $result = $this->aggregate(__FUNCTION__, [$column]); 

     return $result ?: 0; 
    } 

Laravel 5.2.45:

/** 
* Retrieve the sum of the values of a given column. 
* 
* @param string $column 
* @return mixed 
*/ 
public function sum($column) 
{ 
    return $this->aggregate(__FUNCTION__, [$column]); 
} 

Итак, в 5.43, если $ result был NULL, вместо 0 было возвращено.

Я не совсем уверен, если это предназначено поведение по дэвам, поскольку , например, функция подсчета() имеет оттенок (INT) в 5.2.45

return (int) $this->aggregate(__FUNCTION__, $columns); 

Также есть взгляд на commit history этого файла: Они фиксировали агрегированные функции с помощью numericAggreate(), но позже это было снова возвращено.

Как это изменилось для некоторых приложений, я бы сказал это нежелательное поведение, но я не совсем уверен.

Вы можете создать новый issue в репозитории garaub laravel.

До тех пор, у вас есть только 3 Выбор:

  1. Вернитесь к Laravel 5,43 (обновив composer.json) ИЛИ

  2. Adjust код, чтобы иметь дело с нулевыми значениями.

  3. Временно изменить исходный код поставщика (но я бы не рекомендовал это)

+0

Да, кажется справедливым, я догадался так. Я считаю, что это ошибка, поскольку по умолчанию вы ожидаете целое число. Сейчас я просто подниму вопрос и отступлю до 5.2.43. Большое спасибо :) –

Смежные вопросы