CakePHP:不知道如何处理半困难的关系



我正在制作我的第一个CakePHP应用程序,一个订单/发票系统。订单部分进展得很顺利,但是发票方面我需要一些帮助。

我正在使用的数据库结构;一个交货单由多个产品组成,这些产品又存在多个可重复使用的元素(如许多托盘和产品本身)。现在,由于一些客户订购的数量更大,他们得到的价格更低,这是基于时间的(从第1周到第9周,元素y的价格为1欧元,从第10周到第8周,同一元素的价格为1.20欧元)。当然,有些客户只需要使用每日价格,这些价格将以相同的方式存储,只是使用nulled customer_id。

现在我的问题;我完全不知道我应该如何处理发票视图,或者更具体地说;获取数据的最佳方式是什么,或者我是否应该去练习我的sql编写技能。

我看不出您的模式有什么大问题。Containable行为应该会使事情变得简单。将其添加到您的Invoice模型:

var $actsAs = array('Containable');

通过为每个元素添加DefaultPrice关系来简化您的工作。在您的Element模型中:

var $hasOne = array(
    'DefaultPrice' => array(
        'className' => 'Price',
        'foreignKey' => 'element_id',
        'conditions' => array('DefaultPrice.customer_id IS NULL')
    )
);

现在构建发票,设置一个包含参数并将其传递给查找操作。(我假设您想显示元素成本的分项,对吗?)

$contain  = array(
    'DeliveryNote' => array(
        'Product' => array(
            'Element' => array(
                 'DefaultPrice',
                 'Price' => array(
                     'conditions' => array('Price.customer_id' => $customer_id)
                 )
             )
         )
     )
);
$this->Invoice->find('first', array('conditions' => ..., 'contain' => $contain));

这将导致每个Element记录包括DefaultPrice,如果客户正在接收特殊定价,则Price记录也将包括在内。

注意:您可能需要考虑在Element字段中包含default_price字段,并避免必须执行上面的附加连接。每个元素都有默认价格,对吧?

最新更新