我正在开发我的第一个CakePHP应用程序,一个订单/发票系统。订单部分很顺利,但对于发票我需要一些帮助。
我正在使用的database structure; 送货单包含多个产品,而这些产品又存在多个可重复使用的元素(如多个托盘和产品本身) 。现在,由于某些客户订购的数量较大,因此它们的费率较低,这是基于时间的(元素y从第1周到第9周,同一元素从第10周到第8周1.20)。当然,有些客户只需要使用每日价格,这些价格将以相同的方式存储,只需nulled
customer_id。
现在我的问题;我完全不知道如何处理发票视图,或者更具体地说;最好的方法是获取数据,或者我应该去练习我的SQL编写技巧。
答案 0 :(得分:0)
我没有看到您的架构有任何重大问题。 Containable行为应该让事情变得简单。将其添加到您的发票模型中:
var $actsAs = array('Containable');
为每个元素添加 DefaultPrice 关系,让您的生活更轻松。在您的元素模型中:
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,如果客户收到特殊定价,价格记录也将包括在内。
注意:您可能需要考虑在“元素”字段中添加 default_price 字段,并避免必须执行上面的其他连接。每个元素都有默认价格,对吗?