我希望从两个表comments
,users
获取数据
comments
与hasOne
users
的关系
public function getUser()
{
return $this->hasOne(Users::className(), ['user_id' => 'user_id']);
}
我希望从comments.comment_id
表格中获取comments.comment_content
,comments.user_id
,comments
,从uses.user_name
表格中users.user_display_name
,users
在gridview
小部件中使用。
我用
$res = Comments::find()
->select([
'comments.comment_id',
'comments.comment_content',
'comments.user_id',
'users.user_id',
'users.user_display_name',
'users.user_name',
])
->innerJoinWith('user')
->all();
此代码获取comments
字段,但我无法从数据库中获取users.user_name
,users.user_display_name
。
我该怎么做?
注意:数据库中的用户表是users
但是当我使用Gii创建模型时,关系方法声明为getUser()
,我不知道为什么。
更新1:
comments
表:
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
`comment_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_content` text NOT NULL,
`comment_approved` enum('no','yes') NOT NULL DEFAULT 'no',
`comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
`sms_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`comment_id`),
KEY `fk_comment_sms_id` (`sms_id`),
KEY `fk_commetn_user_id` (`user_id`),
CONSTRAINT `fk_comment_sms_id` FOREIGN KEY (`sms_id`) REFERENCES `sms` (`sms_id`),
CONSTRAINT `fk_commetn_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
users
表:
CREATE TABLE `users` (
`user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(60) NOT NULL DEFAULT '',
`user_pass` varchar(64) NOT NULL DEFAULT '',
`user_level` int(11) NOT NULL DEFAULT '1',
`user_email` varchar(100) NOT NULL DEFAULT '',
`user_display_name` varchar(250) NOT NULL DEFAULT '',
`user_phone_number` varchar(11) NOT NULL,
`user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_activation_key` varchar(60) NOT NULL,
`user_status` enum('active','deactive','delete') NOT NULL DEFAULT 'deactive',
PRIMARY KEY (`user_id`),
UNIQUE KEY `u_user_sign` (`user_name`) USING BTREE,
UNIQUE KEY `u_user_email` (`user_email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;
答案 0 :(得分:3)
如果查询返回了任何数据,你不知道如何显示或测试,但你应该阅读Yii中的关系。
Working with Relational Data
Lazy and Eager Loading
延迟加载数据在您尝试访问之前不会存在,因此可能不会显示在print_r
或var_dump
答案 1 :(得分:2)
我建议您将表重命名为comment
和user
。请阅读此处:Table Naming Dilemma: Singular vs. Plural Names为什么要使用单数名称。
Gii生成getUser
而非getUsers
的原因是hasOne
关系。它获得一个用户而不是多个用户 s -
您确定关系定义是否正确?是user_id
用户表中的PK和评论表中的FK吗?你确定数据库中有正确的数据吗?