链接不同索引的CakePHP有很多关系
我有一张这样的证券表:链接不同索引的CakePHP有很多关系,php,mysql,cakephp,Php,Mysql,Cakephp,我有一张这样的证券表: 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=lat
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\u 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关系,这样安全性就有很多securityPrice[securityPrice属于安全性]
我遇到的问题是,Cake使用security
主键链接到security\u prices
表,而不是ticker
字段。我怎样才能通过自动售票机加入
以下是我的人际关系:
//Security
public $hasMany = array(
'SecurityPrice' => array(
'className' => 'SecurityPrice',
'foreignKey' => 'ticker',
)
);
//SecurityPrice
public $belongsTo = array(
'Security' =>
array(
'className' => 'Security',
'foreignKey' => 'ticker',
)
);
您不能使用$hasMany来实现这一点,因为这些关联要求您遵循Cake的主键命名约定。您正试图通过非主键列连接两个表。这是可以做到的,但不是通过蛋糕的自动关联 执行查找操作或分页操作时,需要添加联接条件
$options['joins']=数组(
数组('table'=>'security\u prices',
'alias'=>'SecurityPrice',
'类型'=>'左',
“条件”=>数组(
'Security.ticker=SecurityPrice.ticker',
)
)
);
$Security->find('all',$options);
如果必须经常这样做,那么应该创建一个自定义查找类型
类安全性扩展了AppModel{
public$findMethods=array('ticker'=>true);
受保护的函数\u findTicker($state、$query、$results=array()){
如果($state=='before'){
$query['joins'][]=数组(
数组('table'=>'security\u prices',
'alias'=>'SecurityPrice',
'类型'=>'左',
“条件”=>数组(
'Security.ticker=SecurityPrice.ticker',
)
)
);
返回$query;
}
返回$results;
}
}
然后,很容易找到加入
$Security->find('ticker',…);