定義
定義一對一關聯使用了hasOne,hasOne
方法的參數包括:
hasOne('關聯模型名','外鍵名','主鍵名',['模型別名定義'],'join類型');
下面定義一個用戶表,公司給每個用戶發一輛車,表結構如下:
#汽車表 create table car ( id int primary key AUTO_INCREMENT comment "編號", brand varchar(255) comment '汽車名稱', plate_number varchar(255) comment '汽車號碼', uid int comment '用戶表' ) #用戶表 create table user ( id int primary key AUTO_INCREMENT comment "編號", name varchar(255) comment '姓名', sex varchar(255) comment '性別', age varchar(255) comment '年齡', section varchar(255) comment '部門' )
user的模型使用hasOne()方法關聯car表:
<?php namespace app\demo\model; use think\Model; class User extends Model { //定義關聯方法 public function car(){ //hasOne('汽車表','汽車外鍵','用戶主鍵',['模型別名定義'],'join類型'); return $this->hasOne('car','uid','id'); } }
關聯查詢
//關聯查詢 $user = User::get(1); print_r($user->car); echo "車牌:{$user->car->plate_number},用戶名:{$user->name}"; //或者 $user = User::get(1,'car');
以上只能獲取單條關聯信息,如果想要獲取全部關聯信息,如下:
//方法一:使用關聯預查詢功能,有效提高性能。 $list = User::with('car')->select(); foreach($list as $user){ echo "車牌:{$user->car->plate_number},用戶名:{$user->name}<br>"; } //方法二:獲取全部關聯信息 $list = User::all(); foreach($list as $user){ // 獲取用戶關聯的car模型數據 echo "車牌:{$user->car->plate_number},用戶名:{$user->name}<br>"; }
關聯新增
//關聯新增 $user = new User; $user->name='老黃'; $user->sex='男'; $user->age="24"; $user->section='開發部'; if ($user->save()){ $car['brand']='奔馳'; $car['plate_number']='A31949'; //uid 不需要指定,自動添加 $user->car()->save($car); return "用戶:{$user->name}新增成功"; }
注:添加是uid不需要指定,自動添加;先新增user的信息,再新增car的信息
關聯更新
//關聯更新 $user = User::get(1); $user->name = '小勝'; if($user->save()){ //更新關聯數據 $user->car->plate_number = '粵-A31937'; $user->car->save(); }
注:這是是先更新user的信息,再更新car的信息
關聯刪除
//關聯刪除 $user = User::get(3); if($user->delete()){ //刪除關聯數據 $user->car->delete(); return "用戶:{$user->name}刪除了"; }
注:這是是先刪除user的信息,再刪除car的信息