CakePHP 2.x使用HABTM连接表中的数据检索/查询

时间:2013-11-26 10:36:32

标签: php mysql cakephp cakephp-2.0

我有两个由HABTM关系连接的表。 portfoliosassets。联接表为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的惯例)

1 个答案:

答案 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' 
    )
));