显示A表的记录,该表与B表如果通过主键关联,一对一的关系如下:
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'myauthitem'=>array(self::HAS_ONE,'AuthItem','userid'),
);
}
Querying SQL: SELECT `t`.`id` AS `t0_c0`, `t`.`username` AS `t0_c1`,
`t`.`password` AS `t0_c2`, `t`.`role` AS `t0_c3`, `t`.`description` AS
`t0_c4`, `t`.`last_login_time` AS `t0_c5`, `t`.`last_login_ip` AS `t0_c6`,
`myauthitem`.`name` AS `t1_c0`, `myauthitem`.`type` AS `t1_c1`,
`myauthitem`.`description` AS `t1_c2`, `myauthitem`.`bizrule` AS `t1_c3`,
`myauthitem`.`data` AS `t1_c4` FROM `kj_manager` `t` LEFT OUTER JOIN
`kj_authitem` `myauthitem` ON (`myauthitem`.`userid`=`t`.`id`) LIMIT 10
比如管理员表,字段为id,name,password,role,time....,role字段为“角色”属性,关联Authitem表的name字段,显示description信息。
可通过以下方案解决:
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'myauthitem'=>array(self::HAS_ONE,'AuthItem','','on'=>'t.role=myauthitem.name'),
);
}
‘on’: the ON clause. The condition specified here will be appended to the joining condition using the AND operator.
on子句,通过 and 操作符附加到join条件之后。
因此,relations关系中,如果没有主键关联,则第三个参数必须设置为空。
查看一下生成的SQL:
Querying SQL: SELECT `t`.`id` AS `t0_c0`, `t`.`username` AS `t0_c1`,
`t`.`password` AS `t0_c2`, `t`.`role` AS `t0_c3`, `t`.`description` AS
`t0_c4`, `t`.`last_login_time` AS `t0_c5`, `t`.`last_login_ip` AS `t0_c6`,
`myauthitem`.`name` AS `t1_c0`, `myauthitem`.`type` AS `t1_c1`,
`myauthitem`.`description` AS `t1_c2`, `myauthitem`.`bizrule` AS `t1_c3`,
`myauthitem`.`data` AS `t1_c4` FROM `kj_manager` `t` LEFT OUTER JOIN
`kj_authitem` `myauthitem` ON (t.role=myauthitem.name) LIMIT 10