gpt4 book ai didi

php - CakePHP 将 hasMany 关系与不同的索引链接起来

转载 作者:行者123 更新时间:2023-11-29 02:27:25 24 4
gpt4 key购买 nike

我有一张这样的证券表:

CREATE TABLE IF NOT EXISTS `securities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ticker` varchar(36) NOT NULL,
`name` varchar(180) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ticker` (`ticker`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=585 ;

即主键是id,同时还有另一个唯一索引ticker

ticker 索引指的是我的另一个表,secuity_prices 有这个

CREATE TABLE IF NOT EXISTS `security_prices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`price_date` date NOT NULL,
`ticker` varchar(36) NOT NULL,
`price` decimal(10,6) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=88340 ;

我想在它们之间定义一个 hasMany 关系,这样 security hasMany securityPrice [securityPrice belongsTo security]。

我遇到的问题是 Cake 使用 security 的主键链接到 security_prices 表而不是 ticker 字段.我怎样才能通过自动收报机进行连接?

这是我的关系:

//Security
public $hasMany = array(
'SecurityPrice' => array(
'className' => 'SecurityPrice',
'foreignKey' => 'ticker',
)
);

//SecurityPrice
public $belongsTo = array(
'Security' =>
array(
'className' => 'Security',
'foreignKey' => 'ticker',
)
);

最佳答案

您不能使用 $hasMany 来执行此操作,因为这些关联要求您遵循 Cake 的主键命名约定。您正在尝试通过非主键列连接两个表。这可以做到,但不能通过 Cake 的自动关联。

在执行查找操作或分页操作时需要添加join条件。

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables

$options['joins'] = array(
array('table' => 'security_prices',
'alias' => 'SecurityPrice',
'type' => 'LEFT',
'conditions' => array(
'Security.ticker = SecurityPrice.ticker',
)
)
);

$Security->find('all', $options);

如果您必须经常这样做,那么您应该创建一个自定义查找类型。

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#creating-custom-find-types

class Security extends AppModel {
public $findMethods = array('ticker' => true);

protected function _findTicker($state, $query, $results = array()) {
if ($state === 'before') {
$query['joins'][] = array(
array('table' => 'security_prices',
'alias' => 'SecurityPrice',
'type' => 'LEFT',
'conditions' => array(
'Security.ticker = SecurityPrice.ticker',
)
)
);
return $query;
}
return $results;
}
}

然后通过连接就很容易找到了。

 $Security->find('ticker',.....);

关于php - CakePHP 将 hasMany 关系与不同的索引链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com