一对一关联
Admin模型
<?php
namespace app\common\model;
use think\Model;
use think\model\concern\SoftDelete;
class Admin extends Model
{
protected $table = 'tp6_admin';
protected $pk = 'admin_id';
protected $autoWriteTimestamp = true;
protected $createTime = 'admin_createtime';
protected $updateTime = 'admin_updatetime';
// use SoftDelete;
// protected $deleteTime = 'delete_time';
//关联喜好 1对1
public function hobby()
{
//user_id:关联外键 //tp6_hobby表的外键 //如不对应,可能插入tp6_hobby表user_id为0
//admin_id:当前模型主键
return $this->hasOne(Hobby::class,'user_id','admin_id');//关联条件 admin_id=user_id
}
}
Hobby模型
<?php
namespace app\common\model;
use think\Model;
class Hobby extends Model
{
protected $table = 'tp6_hobby';
protected $pk = 'hobby_id';
}
一、增
//写入数据库
$admin_id=AdminModel::create($params)->getData('admin_id');
// dd($admin_id);
if ($admin_id) {
if (!empty($params['content'])) {
AdminModel::find($admin_id)->hobby()->save([
'hobby_content'=> $params['content']
]);
}
二、增与改
//写入数据库
$admin=AdminModel::find(['admin_id'=>$id]);
if ($admin->save($params)) {
if (!empty($params['content'])) {
if($admin->hobby){ //这是更新
// 方法一
// $admin->hobby->hobby_content=$params['content'];
// $admin->hobby->save();
// 方法二
$admin->hobby->save([
'hobby_content'=> $params['content']
]);
}else{ //这是新增
$admin->hobby()->save([
'hobby_content'=> $params['content']
]);
}
}
return View::fetch($this->toast,[
'infos'=>['修改成功'],
'url_text'=>'去首页',
'url_path'=>url('admin/index'),
]);
}else{
return '修改失败';
}
三、查
- html中使用
<span data-toggle="tooltip" data-placement="right" title="{$vo.hobby.hobby_content}"
- php中查询
dd(AdminModel::find(1)->hobby);//得到关联对象
dd(AdminModel::find(1)->hobby->hobby_content);//得到关联对象的hobby_content值
四、删
$admin = AdminModel::with('hobby')->find($id); // 查询
$result=$admin->together(['hobby'])->delete();// 删除当前及关联模型
####################################################################################################
一对多关联
Admin.php模型
//关联喜好 1对多
public function hobbys()
{
//user_id:关联外键 //tp6_hobby表的外键 //如不对应,可能插入tp6_hobby表user_id为0
//admin_id:当前模型主键
return $this->hasMany(Hobby::class,'user_id','admin_id');//关联条件 admin_id=user_id
}
操作
//一对多关联查询
dd(AdminModel::find(1)->hobbys);//得到关联对象数组
dd(AdminModel::find(1)->hobbys()->select());//得到关联对象数组 //同上
dd(AdminModel::find(1)->hobbys->where('hobby_id','>',3));//管理员id为1的喜好中 hobby_id大于3的记录
//管理员id为1的喜好中 hobby_id大于3的记录 //同上 //推荐使用这种方式 //区别返回对象数组的key是从0开始
dd(AdminModel::find(1)->hobbys()->where('hobby_id','>',3)->select());
//查询关联附表的主表内容,比如大于等于2条的主表记录
dd(AdminModel::has('hobbys','>=',2)->select());
//hasWhere查询关联附表筛选后记录,比如状态为1的主表记录
dd(AdminModel::hasWhere('hobbys',['hobby_status'=>1])->select());
//一对多关联 新增
AdminModel::find(1)->hobbys()->saveAll([
['hobby_content'=>'吃饭','hobby_status'=>1],
['hobby_content'=>'吃饭2','hobby_status'=>1],
]);
//一对多关联删除 和一对1关联删除 //相同
$admin = AdminModel::with('hobbys')->find(3); // 查询
$result=$admin->together(['hobbys'])->delete();// 删除当前及关联模型
//关联修改没有必要,,增加麻烦了。。直接操作附表修改