我需要创建一个或多个文件来集中关于特定操作的所有功能,例如:
但是这些函数使用2个或更多模型,并在数据库中执行一些操作(crud)。
我需要创建一个行为或组件吗?
如何在行为/组件中使用1个或多个模型?的参考?的 ClassRegistry ?的 loadModel ()?
最好的实践是什么?
如果某些用户可以编辑我的文字,为了让其他人更清楚,我很感激。并且,如果标题不正确,也可以更改。谢谢。
对不起我的英语。我知道这很糟糕。
答案 0 :(得分:1)
您的机票缺少大量信息,但让我试着猜测它:
这听起来像你有三个或四个模型,他们的数据应该相互关联。我认为它是这样的:
表:
ASSOCS:
您称之为“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” 不是正确的地方,甚至是你想要做的模式。