2

これはクックブックの例です:

class IngredientsController extends AppController {

    public function index() {
        //grab all ingredients and pass it to the view:
        $ingredients = $this->Ingredient->find('all');
        $this->set('ingredients', $ingredients);
    }

したがってfind('all')、それらすべてを使用してインデックスに返しているようです。frenchIngredients()すべてのフレンチ食材を返すというメソッドを作成することもできると思います。

私の質問は、コントローラーに必要な検索条件ごとに個別の関数を作成する必要があるかということです。

私は CakePHP に本当に慣れていないので、これがどのように機能するのか理解していないだけかもしれませんが、私が見ている方法では、大量の関数やビューを作成する必要があります。検索条件の変更を考慮します。

CakePHP はそれほどひどいものですか、それとも何か不足していますか? PHP OOP が簡単になると思っていましたが、実際には、動作するものを動作方法がわからないものに変換するのは、多くのオーバーヘッドのように思えます。

4

3 に答える 3

0

幸いなことに、単純な条件検索ごとに関数を作成する必要はありません。

このfind関数は複数の引数を取り (データの取得のドキュメントを参照)、そのパラメーターの 1 つが検索条件です。

フランスの食材だけを取りに行きたいですか?材料のカテゴリがあり、「フランスの材料」カテゴリの ID が 2 であるとします。次のようにします。

$this->Ingredient->find('all', array('conditions' => array('category_id' => 2)));

に渡される条件は、この単純な例よりもはるかに複雑findになる可能性があります。

しかしもちろん、単純な検索クエリよりも複雑なロジックがある場合は、モデルに関数を作成することが理にかなっていることがよくあります。

于 2012-11-23T09:19:10.320 に答える
0

Cake にはたくさんの「魔法」の機能があります。やることもできfindBy<columName>ますfindAllBy<columName>。のように列名を連鎖させることもできますfindBy<colum1>And<colum2>

モデルに関する料理本の記事を読むことをお勧めします。クック ブックは、フレームワークで何ができるかについての情報を得るための非常に優れた方法です。関数に関する詳細情報が必要な場合は、より完全なAPIをいつでも覗くことができます。

于 2012-11-23T01:09:28.360 に答える
0

ZF や Codeigniter などのどのフレームワークでも、これは実際にモデルを構築するプロセスだと思います。

CakePHP の例では、Bakery で作成した場合、この機能は既にあります。すべてのモデルに含まれている多くのデータベース機能がありますが、あなたの仕事はそれを拡張することです。すべてのものがモデルですでに作成されているわけではありません。

私が提案できる唯一のことは、Model メソッドの構築に関して冗長にならないようにすることです。「freshIngredients」が他のモデルと同じになると思われる場合は、基本モデルを実装して新しいモデルに拡張できます。新しく追加されたアイテムを返す「newItems」のメソッドを使用してベースモデルを作成するように、またはあなたの部分でそれは成分です。

于 2012-11-23T01:12:35.943 に答える