指摘すべきいくつかのこと...
まず、この場合、コードはそのままで問題ありません。シンプルなものなので、モデルにあるのかビューにあるのかはあまり関係ないと思います。
ビューにそれらを配置することになる問題は、 foreach ループを実行するときにのみデータを使用できるためです。
次に、さらに重要なこととして、"foreach" ループは障壁ではなく、必要に応じてモデルで簡単に実行できることを知っておくことが重要です。モデルに次のようなメソッドを作成するだけです。
public function findAllWithAmountDifference(){
$records = $this->find('all');
// Now go through your records and adjust, before returning them
foreach ($records as &$record):
$record['Record']['difference'] = $record['Record']['outstanding'] - $record['Record']['paid'];
endforeach;
// Now your return value will have extra array keys with the difference
return $records;
}
そして 3 番目に、この特定のケースでそれを行う最善の方法は、仮想フィールド ( http://book.cakephp.org/2.0/en/models/virtual-fields.html ) を使用することだと思います。データベースクエリの一部として行われます。
最後に、プレゼンテーション ロジックと見なされるものとビジネス ロジックと見なされるものとの間に完全に明確な境界があるとは限らないことは明らかです。あなたのような単純なケースでは、どちらの方向にも進む可能性があり、寝坊する価値はありません。
厳密に言えば、2 つの値の差を計算することはデータの操作であるため、モデルに属します。
そうは言っても、モデルではなくビューにそのコードを表示することで、コードがより透過的になり、理解しやすく、維持しやすくなると思われる場合は、それをビューに配置するだけです!
コード理論とベスト プラクティスは、コードのデバッグ、読み取り、拡張、保守を容易にするための一般的なガイドとして意図されています。通常、それらはかなり優れていますが、絶対的なルールではありません。また、ルールやベスト プラクティスに違反することで、コードのデバッグ、読み取り、保守が本当に容易になる場合は、問題ありません。犯せ!