自製PHP框架之模型與資料庫

2022-10-06 08:15:11 字數 1689 閱讀 4966

什麼是模型?

我們的web系統一定會和各種資料打交道,實際開發過程中,往往乙個類對應了關聯式資料庫的一張或多張資料表,這裡就會出現兩個問題。

1.類和資料表,一方修改會導致另一方的修改,只要資料表結構不定下來,業務邏輯的開發幾乎沒法開工

2.獲取資料時會牽涉很多sql語句的拼接,如果資料結構變動,這些sql需要改寫

假如要開發乙個部落格系統,我們先設計兩個model和兩張資料表

第一張資料表,表名是post,儲存了部落格文章,資料如下:

第二章資料表,表名是comment,儲存了部落格文章的評論,資料如下:

post和comment是一對多的關係,每一篇部落格文章對應了多條評論,每一條評論只屬於一篇文章。

model類的設計之前,我們先定義好三個介面

inte***ce imodel

定義model類

class model implements imodel

public static function get($id)

public static function where($condition,$value)

public static function all()

}這三個介面分別負責了三種查詢:遍歷查詢,條件查詢,按編號查詢,其實這三種介面的設計並不是最科學的,甚至get方法不過是where的一種特殊形式,但是這樣的設計並不影響我們工程,甚至也有助於理解,我們後期會對這段**做改動。

之所以在model類裡就完成了sql的拼接,就是希望在子類中不必重複再寫sql。

然後是post類的定義

class postmodel extends model

}還有comment類的定義

class commentmodel extends model

}我們可以在控制器的方法中寫這樣的**來完成呼叫資料

$post=new postmodel();

$post::all();

$arr=$post::get('1');

var_dump($arr);

$comment=new commentmodel();

$arr=$comment::get('2');

var_dump($arr);

我們發現,這樣的**很簡潔,但是問題也程式設計客棧隨之而來,我們sql查詢時候,還有很多複雜的聯表查詢如join操作,如此,拼接sql還是不可避免的,這個複雜的問題,我們放在後面解決。

模型與資料庫

先寫乙個db抽象類,規定類需要實現的方法

abstract class db

這裡以mysql資料為例,當然你也完全可以實現一套sqlite資料庫的介面。

class mysql extends db

mysqli_query($this->connection,'set names utf8');

} public function execute($sql)

public function query($sql)

return $arr;

} public function close()

}談到資料庫類,上述的寫法仍不是最好的,因為我們可以使用單例模式來保證db類只有一次初始化,來節省硬體資源的開銷,但這不是本節的主題,我們把設計模式放在之後來談。 

本文標題: 自製php框架之模型與資料庫

本文位址: /wangluo/php/190003.html

PHP之ThinkPHP框架(資料庫)

php是 後台開發語言,其重要的操作物件莫過於資料庫,之前有了解過mysqli和pdo,但thinkphp的資料庫互動必須使用其特定的封裝方法,或者可以認為其是對php資料庫操作的進一步封裝,以達到更加安全和高效。thinkphp內建了抽象資料庫訪問層,把不同的資料庫操作封裝起來,我們只需要使用公共...

PHP與資料庫

訪問資料庫的資料之前,先要與資料庫建立連線,使用mysql connect 方法與資料庫建立連線。mysql connect 引數 servername 要連線的伺服器。預設是 localhost 3306 username 登入資料庫的使用者名稱。預設值是擁有伺服器程序的使用者的名稱。passwo...

資料庫 關係模型與關聯式資料庫

superkey 乙個或多個屬性的集合,用來在關係中唯一地標識乙個元組 candidate key superkey如果任意真子集都不能成為superkey primary key db設計者選擇的candidate key foreigh key 乙個關係模式在它的屬性中包含另乙個關係模式的主碼 ...