Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp2.x使用HABTM连接表中的数据检索/查询_Php_Mysql_Cakephp_Cakephp 2.0 - Fatal编程技术网

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

cakephp2.x使用HABTM连接表中的数据检索/查询,php,mysql,cakephp,cakephp-2.0,Php,Mysql,Cakephp,Cakephp 2.0,我有两个通过HABTM关系连接的表投资组合和资产。联接表是portfolions\u assets 我希望在联接表中有一个额外的字段,rebalance\u date,这样我就可以查询给定日期的投资组合中的资产。如何构建find,以便确定最近的日期并仅返回该日期的资产 因此,在我的投资组合模型中,我可能有: $params = array( 'conditions' => array( 'Portfolio.id' => 5, '?.rebalance_date'

我有两个通过HABTM关系连接的表<代码>投资组合和
资产
。联接表是
portfolions\u assets

我希望在联接表中有一个额外的字段,
rebalance\u date
,这样我就可以查询给定日期的投资组合中的资产。如何构建
find
,以便确定最近的日期并仅返回该日期的资产

因此,在我的
投资组合
模型中,我可能有:

$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中编写原始查询,如何检索最新日期。(我可以做
从投资组合中选择再平衡日期\u资产顺序按再平衡日期描述限制1;
但这不符合Cake的惯例)

您需要使用hasMany-through模型:

您需要创建另一个模型,例如PortfolioAssets,该表需要是PortfolioAssets,而不是PortfolioAssets

那么您应该能够使用:

$assets = $this->Assets->find('all', array(
    'conditions' => array(
        'Portfolio.id' => 5,
        'PortfolioAsset.rebalance_date' => '2013-11-01' 
    )
));

似乎已经做到了。虽然有点争吵,但还是管用的。如果从
Portfolio
模型运行,那么find调用应该是
$this->PortfolioAsset->find(…
)。