k0432
(Johocn)
January 15, 2012, 1:17pm
1
如果一个表双主键能不能用findByPk查询,
条件值是第一列第二列是要求的反回值
sql 语句
CREATE TABLE `suppliercontacts` (
`supplierid` varchar(10) NOT NULL DEFAULT '',
`contact` varchar(30) NOT NULL DEFAULT '',
`position` varchar(30) NOT NULL DEFAULT '',
`tel` varchar(30) NOT NULL DEFAULT '',
`fax` varchar(30) NOT NULL DEFAULT '',
`mobile` varchar(30) NOT NULL DEFAULT '',
`email` varchar(55) NOT NULL DEFAULT '',
`ordercontact` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`supplierid`,`contact`),
KEY `Contact` (`contact`),
KEY `SupplierID` (`supplierid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `suppliercontacts` VALUES ('CRUISE','Barry Toad','Slips','92827','0204389','','',0);
INSERT INTO `suppliercontacts` VALUES ('CRUISE','French Froggie','Silly mid on','0291991119','1002991','p2038888qp','',0);
已知CRUISE,查找结果为’Barry Toad’,'French Froggie‘
vrworking
(Vrworking)
January 15, 2012, 3:56pm
2
经过测试,对复合主键的表使用 findByPk() 方法查询
需要同时指定全部主键字段的值才能成功执行查询
以下是测试代码:
$criteria = new CDbCriteria(array(
'alias' => 'p',
'select' => 'p.contact',
));
$result = SupplierContacts::model() -> findByPk(array(
'supplierid' => 'CRUISE',
'contact' => ' ', // <----- 此处 Yii 会报错
), $criteria);
foreach ($result as $row) {
echo $row -> contact, '<br/>';
};
其实 API 手册中有提到:
primary key value(s). Use array for multiple primary keys.
For composite key, each key value must be an array (column name=>column value).
混合类型的参数,使用 array 来定义多个主键,
对于复合主键,每一个键值对必须是一个数组
俺的办法是:根据这个命题
使用简单查询 findAll 可以达到楼主的要求:
$criteria = new CDbCriteria(array(
'alias' => 'p',
'select' => 'p.contact',
'condition' => 'p.supplierid=:supplierid',
'params' => array(':supplierid' => 'CRUISE'),
));
$result = SupplierContacts::model() -> findAll($criteria);
foreach ($result as $row) {
echo $row -> contact, '<br/>';
};