前提:订单表(order)和用户表(user)
表结构:
order
CREATE TABLE `order` (
`id` char(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\' COMMENT \'订单号\',
`user_id` bigint(20) NOT NULL DEFAULT \'0\' COMMENT \'用户id\',
UNIQUE KEY `id` (`id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=\'订单表\';
user
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT \'用户id\',
PRIMARY KEY (`id`),
`username` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\' COMMENT \'姓名\',
`password` char(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\' COMMENT \'密码\',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10009866 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=\'用户表\'
**表关系:**user->order :一对多
需求:在查看订单详情时显示下单用户
实现:
1、当order表中外键为user_id user表主键为id时
public function user()
{
return $this->belongsTo(\'Models\User\');
}
2、当order表中外键为user_id user表主键为uid
public function user()
{
return $this->belongsTo(\'Models\User\', \'user_id\', \'uid\');
}
返回结果:
{
"id": 17021423166486,
"user_id": 10000003,
"user": {
"id": 10000003,
"username": "",
}
}
beyondsTo和hasOne 两者相反,比如用户表和订单表,一个用户记录有多个订单 用hasMany 一个订单只有一个用户,用beyondsto 一个订单属于一个用户,查询出用户信息
好像也可以用hasone 一个订单有一个用户 。主要要写对参数
第一个参数是外键,就是第一个参数那个model表的键 等于第三个参数我本身的键的值
比如 用户表有id name
订单表有order_id ,user_id ,
那么根据用户关联订单的时候,用hasmany(orderModel ,user_id,id)
根据订单查询用户详情 beyondsto(userModel,id,user_id)