Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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
链接不同索引的CakePHP有很多关系_Php_Mysql_Cakephp - Fatal编程技术网

链接不同索引的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',…);