在CakePHP 2.3中创建公共函数的最佳方法

时间:2013-02-21 19:24:37

标签: php cakephp

我需要创建一个或多个文件来集中关于特定操作的所有功能,例如:

  • 返还客户支票的总和。
  • 关闭特定客户的支票。
  • 将特定桌子的所有项目转移给其他人。

但是这些函数使用2个或更多模型,并在数据库中执行一些操作(crud)。

我需要创建一个行为或组件吗?

如何在行为/组件中使用1个或多个模型?的参考?的 ClassRegistry ?的 loadModel ()?

最好的实践是什么?


如果某些用户可以编辑我的文字,为了让其他人更清楚,我很感激。并且,如果标题不正确,也可以更改。谢谢。

对不起我的英语。我知道这很糟糕

1 个答案:

答案 0 :(得分:1)

您的机票缺少大量信息,但让我试着猜测它:

这听起来像你有三个或四个模型,他们的数据应该相互关联。我认为它是这样的:

表:

  • 客户
  • 检查
  • CartsItem
  • BoughtItem

ASSOCS:

  • 客户已经多次检查
  • Customer hasMany CartsItem
  • BoughtItem属于Customer

您称之为“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” 不是正确的地方,甚至是你想要做的模式。