あなたのチケットには膨大な量の情報が不足していますが、推測してみましょう。
これは、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」は、あなたがやりたいことのための適切な場所やパターンではありません。