学习路之PHP--TP关联简单使用

一对一关联

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 '修改失败';
}

三、查

  1. html中使用
<span data-toggle="tooltip" data-placement="right" title="{$vo.hobby.hobby_content}"
  1. 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();// 删除当前及关联模型 


//关联修改没有必要,,增加麻烦了。。直接操作附表修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值