2017-05-06 4 views
0

だから私は今の私が言うことができ、多くの多型関係に多くのようなフィードバックモデルを持っている:Laravelで多形関係から平均を得るにはどうすればよいですか?

$user->feedbacks 

、それは今私のような何かをしたい、それに応じて関係を取得します:

$user->feedbacks->getAverage() 
を単純に(1から5までの数字)の平均フィードバック評価

を吐き出すために

私はFeedback.phpモデルファイルに次の関数を追加しました:

public function getAverage(){ 

    $described = $this->avg('described'); 
    $recommend = $this->avg('recommend'); 
    $communication = $this->avg('communication'); 

    $average = ($described + $recommend + $communication)/3; 

    return $average; 
} 

しかし、Laravelはこの方法を認識しません。

助けてください。

+0

私の代わりに、私はこの機能を配置私のUserモデルで、このための回避策を見つけました: パブリック関数getAverageFeedback(){ $フィードバック=の$ this - > morphToMany(フィードバック::クラス、 'feedbackable'); $ described = $ feedbacks-> avg( '明細'); $ recommend = $ feedbacks-> avg( 'お勧め'); $ communication = $ feedbacks-> avg( 'communication'); $平均=($記述+ $お勧め+ $通信)/ 3; return $ average; } しかし、これが最良のアプローチであるかどうかはまだ分かりません –

答えて

1

メソッドはUserモデル上にある必要があります。オブジェクトのチェーンを見ると、CollectionクラスインスタンスのgetAverageメソッドを呼び出そうとしています(つまり、モデルをクエリして関連するモデルが返されます)。コレクションにはgetAverage()というメソッドはありません。

問題を解決するには、UserモデルでgetAverage()メソッドを作成し、その中に関連するFeedbackモデルコレクションを取得し、取得したモデルに基づいて平均を計算します。

関連する問題