1

特定の操作に関するすべての機能を集中させるために、1 つ以上のファイルを作成する必要があります。次に例を示します。

  • 顧客小切手の合計を返します。
  • 特定の顧客のチェックを閉じます。
  • 特定のテーブルのすべてのアイテムを他のテーブルに転送します。

ただし、関数は2つ以上のモデルを使用し、データベース(crud)でいくつかの操作を実行します。

動作またはコンポーネントを作成する必要がありますか?

Behavior/Component で 1 つ以上のモデルを使用するにはどうすればよいですか? 参照? クラスレジストリ? ロードモデル()?

ベストプラクティスは何ですか?


一部のユーザーが私のテキストを編集して、他のユーザーにとってより明確にすることができれば、感謝します。また、タイトルが正しくない場合は変更します。ありがとうございました。

私の英語でごめんなさい。それは悪いことです。

4

1 に答える 1

1

あなたのチケットには膨大な量の情報が不足していますが、推測してみましょう。

これは、3つまたは4つのモデルがあり、それらのデータは相互に関連している必要があるようです。私はそれが次のようなものだと思います:

テーブル:

  • お客様
  • 小切手
  • CartsItem
  • BoughtItem

Assocs:

  • 顧客は多くのチェックを持っています
  • 顧客は多くのカートアイテムを持っています
  • BoughtItemはお客様のものです

「lib」と呼び、トリガーしたいのは、「チェックアウト」や「レポートの実行」アクションなどの単一のアクションによって確実にトリガーされることです。私には、カートをチェックアウトするか、顧客のアイテムリストを生成したいようです。

Customerモデルの中には、次のような方法があります。

public function report($customerId, $checkid) {
    $sum = $this->Check->calculateSum($customerId, $checkId);
    $checkClosed = $this->Check->close($checkId);
    $items = $this->CartsItem->find('all', array(
        'conditions' => array('CartsItem.customer_id' => $customerId)));
    foreach ($items as $item) {
        $this->BoughtItem->save($item['CartsItem']);
    }
    $this->CartsItem->deleteAll(array('CartsItem.customer_id' => $customerId));
    return compact('sum', 'checkClosed', 'items');
}

データが関連していない場合は、ClassRegistry :: init('ModelName');を使用してください。別のモデルのインスタンスを取得します。

ただし、重要なのはデータ操作であるため、モデルメソッドの明確な仕事です。リクエストからパラメータが必要な場合は、それらを引数としてそのメソッドに渡すだけです。あなたのメソッドはあなたが必要とするものは何でも返すことができます、それはあなた次第です。

「lib」は、あなたがやりたいことのための適切な場所やパターンではありません

于 2013-02-22T01:05:21.837 に答える