最新的入门我有两个表:查询加盟关联模型表(CakePHP的)
订单
id | timestamp
--------------------------
1 | 2013-05-01 12:56:33
order_prices订单价格的
此表存储快照。订单下达后,第一个条目将以原始价格制成。之后,价格可以通过管理系统进行更改,所以当价格改变时,会记录新的价格。
id | order_id | price | timestamp
--------------------------------------------------
1 | 1 | 400.00 | 2013-05-01 12:56:33
1 | 1 | 450.00 | 2013-06-01 18:07:35
1 | 1 | 300.00 | 2013-07-01 17:42:16
模式
class Order extends AppModel {
public $hasMany = array('OrderPrice');
}
class OrderPrice extends AppModel {
public $belongsTo = array('Order');
}
所以我的问题是如何在订单执行查找,而在“当前”的价格(拉即在order_prices表的最新条目的订单),还是原始价格,或任何历史时间点的价格?
我想以最轻松的方式做到这一点,以便重复使用。我不知道这是否可以通过虚拟领域完成,但这是理想的,因为那样我就可以在需要的时候提供当前的订单价格。
我的解决方案,到目前为止,使用中可容纳的行为:
$this->Order->find('first', array(
'contain' => array(
'OrderPrice' => array(
'order' => 'OrderPrice.timestamp DESC',
'limit' => 1
)
));
但是,这意味着我必须每一次,这是不理想的,因为我会得到订单价格增添了不少。我真的可以用尽可能多的方式将这些内容加入到模型中,这样我就不必重复它了。
我试着为OrderPrice模型添加一个默认的订单属性,但它似乎不适用于可容纳的,并且您不能添加默认的limit
属性。
class OrderPrice extends AppModel {
// Doesn't work from containable
public $order = 'ObeOrderPrice.timestamp DESC';
看看可遏制的行为。然后你就可以为第二个表添加条件,比如比较时间戳等... http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html –
是的,我使用可容纳很多。我将重新阅读本书,看看是否有一种简单的方法可以使用易于理解的方式来完成。不幸的是,这将需要重复的代码很多,总是得到我的订单的价格。 – BadHorsie
如果我得到时间,当我回到家,生病看看我能不能制定我如何想象你可以解决这个问题 –