我有两个由HABTM关系连接的表。 portfolios
和assets
。联接表为portfolios_assets
。
我希望在联接表中有一个额外的字段rebalance_date
,这样我就可以查询投资组合中给定日期的资产。如何构建find
以便我可以确定最近的日期并仅返回该日期的资产。
所以,在我的Portfolio
模型中,我可能会:
$params = array(
'conditions' => array(
'Portfolio.id' => 5,
'?.rebalance_date' => '2013-11-01' //no model name for this field as it's in the join table
),
'order' => array(...)
);
$result = $this->find('all', $params);
在上面的例子中,我只是键入了一个日期。我不确定如何在不在Cake中编写原始查询的情况下检索最新日期。 (我可以做SELECT rebalance_date FROM portfolios_assets ORDER BY rebalance_date DESC LIMIT 1;
,但这不符合Cake的惯例)
答案 0 :(得分:1)
您需要使用hasMany直通模型:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany-through-the-join-model
你需要创建另一个模型,例如PortfolioAssests,表格需要是portfolio_assets而不是portfolio_assets。
然后你应该可以使用:
$assets = $this->Assets->find('all', array(
'conditions' => array(
'Portfolio.id' => 5,
'PortfolioAsset.rebalance_date' => '2013-11-01'
)
));