2016-10-04 6 views
1

Laravel v.5.2.43とv.5.2.45の2つのバージョンの違いを理解したかっただけです。値が以前のバージョンで0の代わりにNULLに戻ったときLaravel 5.2.43 vs 5.2.45(Eloquent Sumは0の代わりにnullを返します)?

// 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'); 

私はレポートツールを持って、全体の操作が崩壊されています

私は、次の違いを観察しています。

ここでの質問は機能、バグですか?機能の場合は、動作を変更するためのより良い選択肢はありますか?または、この機能を受け入れるためにコードを変更する必要がありますか? \を照らし\データベースの合計方法を比較

答えて

1

\クエリー\ビルダー (にあるファイル:ベンダー/ laravel /フレームワーク/ SRC /照らしなさい/データベース/クエリ/ 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が返されます。 5.2.45

私は 例えばcount()関数は(int型)へのキャストを持っているので、それは開発者によって動作が意図されている場合、完全にわからない

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

も見ていますそのファイルのcommit history numericAggreate()を使用して集計関数を修正しましたが、後でこれが再び復帰しました。

一部のアプリでは大きな変更となっているため、このような望ましくない動作についてはわかりますが、完全にはわかりません。

新しいissueをlaravel githubリポジトリに作成することは自由です。

  1. は(composer.jsonを更新することで)戻っLaravel 5.43へ行くか

  2. null値に対処するようにコードを調整します。

    はそれまで、あなただけの3の選択肢を持っています。

  3. 一時的にいやベンダーのソースコードを変更する(しかし、私はこれをお勧めしません)

+0

は、公正なようだ、私はそう推測しました。私はそのバグがデフォルトでは整数を期待していると信じています。私はただ今問題を提起し、今は5.2.43にフォールバックするつもりです!どうもありがとう :) –

関連する問題