我有 2 个通过 HABTM 关系连接的表。 投资组合
和 Assets
。连接表是portfolios_assets
。
我希望在连接表中有一个额外的字段,rebalance_date
,以便我可以查询给定日期的投资组合中的 Assets 。我将如何构造一个 find
以便我可以确定最近的日期并仅返回该日期的 Assets 。
所以,在我的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的惯例)
最佳答案
您需要使用 hasMany through 模型:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany-through-the-join-model
您需要创建另一个模型,例如PortfolioAssests,并且该表需要是portfolio_assets 而不是portfolios_assets。
那么您应该能够使用:
$assets = $this->Assets->find('all', array(
'conditions' => array(
'Portfolio.id' => 5,
'PortfolioAsset.rebalance_date' => '2013-11-01'
)
));
关于php - CakePHP 2.x 使用 HABTM 连接表中的数据检索/查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20214643/