关联概念
- 关联模型,即:两张或以上的表进行一定规则的绑定关联:
- 比如:一个学生(学生表)对应一张一个信息卡(信息表),这种就是一对一;
- 再比如:一篇博文(帖子表)对应多个评论(评论表),这种就是一对多;
- 再再比如:一个用户(用户表)对应多个职位(权限表),
而一个职位有可以有多个用户:那么,这种就是多对多关联
e. 自然,还有更多更复杂的关联,都是基于此的,我们只探讨这三种:
f. 既然是关联,当然会有绑定的概念,当有数据库操作,关联表也会跟着变动;
g. 这就是关联模型的意义;一对一关联
- 一对一关联,我们选择这两张表来做演示,首先看下两张表的结果对比;
PS: 主表主键设为id,关联主键默认就是id,可以默认不写;
PS: 附表的外键设置为userid, 即主表名主键,吻合可默认不写;
b. 由于之前Models 下的User.php模型代码很多了,改成.bak后重建;
d. 创建两个model,User.php 和 Profile.php,并使用命令实现提示;
php artisan ide-helper:models
//User.php, 一对一关联Profile表
public function profile(){
//参数1或:’App\Http\Models\Profile’
//参数2:默认为user_id,如不是需要指明
//参数3:默认id,如不是需要指明
return $this->hasOne(Profile::class);//一般都是系统默认情况的话
return $this->hasOne(Profile::class, ‘user_id’, ‘id’);//这是里面应该有的参数
}
e. 注意:Profile.php只要建立空类即可,不需要其他,一对一调用如下:
// 注意:->profile不要加括号,以属性的方式访问
$profiles = User::find(20)->profile;
return $profiles;
f. 一对一也支持反向关联:定向方向关联:具体通过在Profile设置即可:
//profile.php
//参数1为主类表
//参数2,3和正向一致,默认对应可以不写
public function user(){
return $this->belongsTo(User::class, ‘user_id’, ‘id’);//和上面一样,一般情况下后面两个参数可以不用写
}
$users = Profile::find(1)->user;
return $users;