1.一对一 :相当查询的结果只有一条;和->find()一样
2.一对多 :相当查询的结果多条;和->select()一样
3.远程的意思:跳过中间的表来查询
例子:比如有三个关联表,省、市、区,如果只查得广东省的所有区,跳过了查市中间表
使用方法:
在用户表(User)对应的模型文件中写上关联关系,可以写多个
<?php
namespace app\model;
use think\Model;
class User extends Model
{
//用户关联订单表(查用户的订单)
public function order(){
return $this->hasOne(order::class,'uid','id'); //order是数据库order表的对应模型文件
}
//用户关联购买商品表(查用户购买了多少产品)
public function proderot(){
return $this->hasOne(proderot::class,'uid','id');//proderot是数据库proderot表的对应模型文件
}
}
hasOne('关联模型类名', '外键', '主键');
除了关联模型外,其它参数都是可选。
- 关联模型(必须):关联模型类名
- 外键:默认的外键规则是当前模型名(不含命名空间,下同)+
_id
,例如user_id
- 主键:当前模型主键,默认会自动获取也可以指定传入
在上面例子中:hasOne(order::class, 'uid', 'id');
uid:order表中有字段:uid=是记录用户ID;
id:是用户User表的ID主键
如果用户表与订单表都有同一个字段type,那么就要改名
hasOne(Profile::class, 'uid')->bind([
'type' => 'order_type',
]);
把订单表中type改order_type
官网教程:查询数据 · ThinkPHP6.0完全开发手册 · 看云