Day11-從基礎學習 ThinkPHP-Model

前言

這一章節會稍微短一點,主要是介紹基礎的 Model 定義,但是在一般開發下是不太會針對 Model 做太多的設置,所以你會發現這一章節真的比較沒有什麼。

起手式

首先 Model 定義的方式很簡單,但是在那之前我們必須先建立 Model 資料夾,因為預設 ThinkPHP 並沒有提供 Model 資料夾,所以我們在 about 底下建立一個 model 資料夾,並新增一個檔案叫做 about.php ↓

about

那 Model 定義的方式只需要這樣子即可:

1
2
3
4
5
6
7
8
<?php
namespace app\about\model;

use think\Model;

class about extends Model
{
}

裡面最需要注意的地方只有這一段程式碼 use think\Model;,這一段是在告知 ThinkPHP 我們要使用 Model 的核心庫,如果你缺少這一行就會無法正常運行唷。

好,恭喜你,你已經完成基礎的 Model 定義了(?!),但是僅僅定義 Model 是不夠的,畢竟 Model 會操控 DB,所以下來我們要來設置資料庫。

連接資料庫

當我們準備好上面動作後,就要來做一下連接資料庫動作,否則 Model 是無法做任何操作 DB 的。

資料庫設置的檔案位於 project/config 底下的 database.php,只需要將相關欄位填入即可 ↓

database

基本上只需要填入 hostnameusernamepassword 就可以了,那麼依照我的 MySQL 設置,就會這樣填入 ↓

MySQL

只是有一個地方我有另外填入,也就是 prefix,因為我建立的資料庫是有前綴的,所以才會填入 think_

接下來我們要先來新增一張資料表(後面章節會使用到),SQL 指令我就直接給各位囉~

1
2
3
4
5
6
7
CREATE TABLE think_user (
id int(10) NOT NULL auto_increment,
name varchar(5) NOT NULL default '',
weight int(5) NOT NULL default 0,
height float(5) NOT NULL default 0,
PRIMARY KEY (id)
) AUTO_INCREMENT=1;

你可以發現我資料表也會加上前綴,而這等一下會幫助我們後面的操作,最主要是因為我在前面設置 database.php 時,有填入 prefix => 'think_',那麼資料庫在建立上就都必須加上前綴,否則 ThinkPHP 找不到唷。

模型指定資料表

接下來由於我在 database.php 有設置資料庫 & 表的前綴 think_,所以我們接下來再指定資料表的時候必須這樣寫 ↓

1
2
3
4
5
6
7
8
9
<?php
namespace app\about\model;

use think\Model;

class about extends Model
{
protected $table = 'think_user';
}

當然你也可以簡寫,ThinkPHP 會幫你帶上 think_,只是我個人習慣寫完整一點:

1
protected $table = 'think_user';

另外如果你希望這個 Model 會連接不同的資料庫也是可以,只需要這樣寫入設定覆蓋原本的就可以了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
namespace app\about\model;

use think\Model;

class about extends Model
{
protected $connection = [
// 資料庫類型
'type' => 'mysql',
// 資料庫 IP
'hostname' => '127.0.0.1',
// 資料庫名稱
'database' => 'test',
// 使用者名稱
'username' => 'root',
// 密碼
'password' => '',
// 資料庫端口
'hostport' => '',
// 參數
'params' => [],
// 編碼
'charset' => 'utf8',
// 前缀
'prefix' => 'think_',
// Debug 模式
'debug' => true,
];
}

結尾

這邊這樣講下來,其實非常的模糊的,所以後面章節會慢慢在搭配 Controller+Model 的操作來加深觀念。