制作小网站,网站后台 源码,如何建多语言网站,网站建设开源节流一、什么是关联模型
关联模型指在 tp 中使用模型对多个数据表进行关联。例如一个主账户表与一个账户信息表进行关联#xff0c;此时两者关联后可以更加简便的进行操作#xff0c;使代码更加清晰#xff0c;操作更加简便。
二、 正向一对一关联
一对一关联指的是数据只有一…一、什么是关联模型
关联模型指在 tp 中使用模型对多个数据表进行关联。例如一个主账户表与一个账户信息表进行关联此时两者关联后可以更加简便的进行操作使代码更加清晰操作更加简便。
二、 正向一对一关联
一对一关联指的是数据只有一条而非多条。
首先我们有一个 user 表如下 接着给 student 表添加对应的 uid 列 随后我们在model 文件夹下创建一个 User 的php 文件用于模型 在 User 模型表中编写代码
?php
namespace app\model;
use think\Model;class UserModel extends Model
{protected $name user;
}接着咱们在 User 模型中编写对应的关联代码想要关联多张表在创建一个对应表名的方法和表模型即可
?php
namespace app\model;
use think\Model;class UserModel extends Model
{protected $name user;public function student(){return $this-hasOne(StudentModel::class,uid);}
}在 student 方法中hasOne 表示一对一关联其中第一个参数 StudentModel::class 表示关联的表而第二个参数表示其表中所关联的外键为 uid。
接着我们直接使用模型进行查询看看是否成功关联。我们在 index 类中更改 usemodel 方法
public function useModel(){$user UserModel::find(7); return json($user-student-name);
}其中 UserModel 直接find 主键id 为 7 的数据接着直接使用 json 返回 user 表下所关联的 student 表中的 name字段查看是否成功获取最后访问该方法的结果如下成功获取到了数据
三、 反向一对一关联
有了正向关联后反向关联咱们可以不用进行编写但是你想编写也行咱们在 student 模型类中编写代码如下
?php
namespace app\model;
use think\Model;class StudentModel extends Model
{protected $name student;public function user() { return $this-belongsTo(UserModel::class); }
}四、一对多关联
一对多关联指主表关联的数据在副表中有多条对应例如此时我在副表中右如下数据 此时 uid 的值是有两条重复的那么我们此时修改对应的 user 模型中的方法
public function student(){//return $this-hasOne(StudentModel::class,uid);return $this-hasMany(StudentModel::class,uid);
}修改 hasOne 成 hasMany 即可此时修改对应的useModel 方法如下
public function useModel(){$user UserModel::find([uid20]); return json($user-student);
}结果如下
此时还可以进行链式操作查询身高大于 168 的数据
public function useModel(){$user UserModel::find([uid20]); return json($user-student()-where(height,,168)-select());
}结果如下
五、关联模型的数据新增
使用关联模型进行数据新增可直接使外键进行增加只要考虑数据的新增即可以下是代码示例
public function useModel(){$user UserModel::find(7); $res$user-student()-saveAll([ [name关联数据1, height0], [name关联数据2, height0] ]);dump($res);}此时我们首先是使用了 find随后直接给与 student 数据新增新增时不需要传入对应的 uid 数据因为之前在模型中已经进行了设置外键那么访问后数据库成功新增数据 此时成功操作后所返回的内容是对应的模型数组
六、关联删除
关联删除可使删除主表数据时同时删除副表数据以下为示例
public function useModel(){$user UserModel::with(student)-find(7); $res$user-together([student])-delete();dump($res);
}在这里要注意需要使用 with 方法随后使用 together 传入一个副表数组可以传入多个副表进行删除返回值为布尔值