ThinkPHP5——模型關聯(一對一關聯)


定義

定義一對一關聯使用了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的信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM