ThinkPHP5中模型中的一對一,並予以實例說明。

這裏我們要清楚一點的是模型層的是來做什麼用的,是用來處理業務邏輯的地方,控制層是用來控制業務邏輯的地方,模型的好處個人認爲它能夠自動加載數據,所謂的增刪改查,他都能夠通過關聯處理多張表,軟刪除等一系列操作。那thinkPHP5中的模型到底有些什麼啦,這裏我們選用看雲官方手冊裏面的一張圖來表示。

 模型的方便在什麼地方啦,舉個列,我們在寫一個項目的時候時常有些地方的某些類型是通過狀態值來表示的,存的都是int類型的對不對,(0,1,2這樣的),而實際上,前端又需要我們返還給他真正對應的含義,這個時候模型的裏面的獲取器就非常有用了。僅僅只需要在模型中進行一些定義,拿出來的數據就自動做了轉換,這裏我們就不再詳細概述了,大家可以去看手冊下的模型菜單下的獲取器章節,切記一定用自己動手加深映像。下面我們進入今天的正題。模型中的一對一關聯。其實程序中的表並非一開始並非是直接動手通過Navicat或者什麼工具建表出來的,而是通過ER圖,通過圖形反應某張表與某張表之間的關係來的再建立相應的表,通過外鍵關聯而來。那麼我們再回頭看看什麼是一對一關聯。首先我們本地新建一個數據庫命名爲tp5model,在這個庫下面新建一張表爲member。如下圖所示:

填入下面的內容。

再建立一張表爲profile表(個人信息表),如下圖所示。

填入一些信息:

 這裏我們需要知道,在設定之處我們認爲,每一個用戶只能夠擁有一個個人信息,所以member對於profile表之間的關係應當是1對1的關係(也就是一個用戶對應一個個人信息),下面我們開始在模型裏面進行關聯。

我們首先使用hasOne()方法進行關聯。這裏需要豬with()方法取出關聯的數據,再通過控制層調用模型方法取出數據。像下面這樣。

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/8/24 0024
 * Time: 00:10
 */

namespace app\index\model;


use think\Model;

class Member extends Model
{

    public function profile(){
        //hasOne()方法中第一個爲關聯的模型名稱,第二個爲關聯的外鍵,
        //所以這裏分別是Profile模型和profile_id外鍵
        return $this->hasOne('Profile','profile_id');
    }

    public function Memberdata(){
        $Member=new Member();
        $data=$Member->with('profile')->select();
        return $data ;
    }

}

 

控制層代碼如下:

<?php
namespace app\index\controller;

use app\index\model\Member;
use think\Controller;

class Index extends Controller
{
    public function index()
    {

        $MemberData=model('Member');
        $data=$MemberData->Memberdata();
        return json($data);

    }
}

最後是我們頁面的效果,如下圖所示。

 如果只想輸入某些字段內容只需要加入field()方法過濾掉即可。

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/8/24 0024
 * Time: 00:10
 */

namespace app\index\model;


use think\Model;

class Member extends Model
{

    public function profile(){
        //hasOne()方法中第一個爲關聯的模型名稱,第二個爲關聯的外鍵,
        //所以這裏分別是Profile模型和profile_id外鍵
        return $this->hasOne('Profile','profile_id');
    }

    public function Memberdata(){
        $Member=new Member();
        $data=$Member->with('profile')->field('id,username')->select();
        return $data ;
    }

}

效果如下:

最後由於模型中有關聯預載入,大數據量很大的時候,他比jion()方法加載的更加的快速,無論是LeftJion還是RightJion或者InnerJion,所以推薦大家還是多使用模型。今天這篇重寫模型的一對一就先到這兒了。下次重新講解模型的一對多,好夢各位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章