什麼是模型?
我們的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 乙個關係模式在它的屬性中包含另乙個關係模式的主碼 ...