如果一个表双主键能不能用findByPk查询条件值是第一列第二列是要求的反回值

如果一个表双主键能不能用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‘

经过测试,对复合主键的表使用 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/>';

};



谢谢您的帮助