在上一篇部落格中,我們抽象出了Controller的基類,實現了頁面的渲染和返回JSON字串的功能。
那作為一個架構,我們現在還缺少什嗎?是的,大家應該已經注意到了,我們在這之前從來沒有串連過資料庫,我們缺少一個ORM(Object Relational Mapping)。
在php中串連mysql有三種方式,分別是使用原生函數、mysqli擴充和PDO擴充,詳細內容可以查看我之前的部落格《PHP的學習--串連MySQL的三種方式》。
我們要選擇哪一種呢?考慮到作為一個架構不能僅支援一種資料庫,我們就選擇使用PDO。當然如果你確定你的架構只需要串連mysql資料庫,也可以考慮使用mysqli。
PDO支援如下的資料庫:
- CUBRID (PDO)
- MS SQL Server (PDO)
- Firebird (PDO)
- IBM (PDO)
- Informix (PDO)
- MySQL (PDO)
- MS SQL Server (PDO)
- Oracle (PDO)
- ODBC and DB2 (PDO)
- PostgreSQL (PDO)
- SQLite (PDO)
- 4D (PDO)
當然,這些資料庫即使都可以使用PDO去串連使用,但在某些具體的情況下,還是有些許不同的,詳情可參考PDO文檔
鑒於我電腦現在只安裝了mysql,之後的code,只會測試mysql資料庫,不會測試其他資料庫。
首先我們會將這些內容放在src/db檔案夾中,我們需要定義一下介面,這裡我們會先安最簡單的來。
我們需要實現什嗎?最簡單的就是資料的增刪改查。
假設我們現在有一張article表,一個與之對應的Model Article,我們希望怎麼用它呢?
// 選出id為1的一篇文章$article = Article::findOne(['id' => 1]);// 選出status是unpublished的所有文章$articles = Article::findAll(['status' => 'unpublished']);// 將id為1的所有文章的status更新為publishedArticle::updateAll(['id' => 2], ['status' => 'published']);// 刪除所有id為1的文章Article::deleteAll(['id' => 2]);// $article是之前選出的id為1的文章// 更新它的屬性status為unpublished$article->status = 'unpublished';// 儲存更新到資料庫$article->update();// 刪除該文章$article->delete();// 建立一個新文章$article = new Article();$article->name = 'My first article';$article->status = 'published';// 將該文章儲存到資料庫中$article->insert();
大概在上面列了一下,我們簡單的ORM實現之後的使用,據此我們可以定義出如下介面:
phpnamespace sf\db;interface ModelInterface{ publicstaticfunction tableName(); publicstaticfunction primaryKey(); publicstaticfunction findOne($condition); publicstaticfunction findAll($condition); publicstaticfunction updateAll($condition, $attributes); publicstaticfunction deleteAll($condition); publicfunction insert(); publicfunction update(); publicfunction delete();}
該檔案放在src/db檔案夾下,這是我目前想到的最簡單的介面,可能會有所遺漏,我們會在開發的時候不斷完善。暫時我們會先按照這個實現。
這是一個介面,之後我們會有一個BaseModel類實現這個介面,然後所有的Model都繼承BaseModel去實現。
好了,今天就先到這裡。項目內容和部落格內容也都會放到Github上,歡迎大家提建議。
code:https://github.com/CraryPrimitiveMan/simple-framework/tree/0.4
blog project:https://github.com/CraryPrimitiveMan/create-your-own-php-framework
以上就介紹了構建自己的PHP架構--定義ORM的介面,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。