#phalcon-入門篇7(Model層基礎使用)#php
本教程基於phalcon2.0.9版本mysql
##前言## 先在這裏感謝各位phalcon技術愛好者,咱們提供這樣一個優秀的交流平臺git
離上一次更新已經有一段時間了,主要是最近工做比較繁忙,在就是phalcon的model層確實是一塊難吭的骨頭,這邊打算分紅多個小節對model從淺到深進行了解,對於一些深刻的功能將會放到比較後面的章節結合例子進行說明,那麼開始今天的嗎model初體驗之旅sql
注:筆者水平有限,說的不正確的地方但願你們多多指正,一同交流技術數據庫
附上:數組
喵了個咪的博客:http://w-blog.cnapp
教程代碼庫:http://git.oschina.net/wenzhenxi/Phalcon-tutorialide
phalcon官網地址:https://phalconphp.com函數
phalcon中文社區:http://www.iphalcon.cn/.net
##1. 準備工做##
phalcon提供了抽象的數據庫操做類,能夠對Mysql,Oracle,Postgresql,Sqlite進行使用.
注意:phalcon當前DB類不支持mssql
首先你須要有一個Mysql數據庫,這裏就很少說了,而後你們還記得咱們使用的配置文件嗎?咱們在ini.ini中加入以下配置項:
[database] adapter = Mysql host = 127.0.0.7 username = root password = dbname = phalcon
咱們緊接着在mysql中創建一個名爲phalcon的庫,而後在裏面執行以下語句創建user庫:
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL, `passwd` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
當我咱們要須要把數據庫實例化以便後續的使用,咱們在index.php加入以下語句:
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter; // 初始化數據庫鏈接 從配置項讀取配置信息 $di->set('db', function () use ($ConfigIni) { return new DbAdapter(array( "host" => $ConfigIni->database->host, "username" => $ConfigIni->database->username, "password" => $ConfigIni->database->password, "dbname" => $ConfigIni->database->dbname )); });
最後一步創建咱們的model文件目錄(在app下面)而且進行自動加載設置:
$loader->registerDirs(array( // 控制器所在目錄 '../app/controllers/', //model所在目錄 '../app/models/', ))->register();
那麼到這裏準備工做也就完成了
##2. 基本CURD##
固然和往常同樣咱們創建BasemodelController控制器提供咱們今天的教程代碼
midel的約定是必須創建一個表對象是的實例,咱們在app/model下面創建User.php文件加入以下代碼:
use Phalcon\Mvc\Model; class User extends Model { //咱們能夠創建一些類的公共變量,變量對應表的字段 public $id; public $name; public $phone; public $passwd; }
注意:必須繼承基礎Model類
###2.1 插入數據###
咱們在BasemodelController下面創建insertAction方法:
public function insertAction() { $User = new User(); //設置須要寫入的數據 //若是在model裏面沒有設置公共變量,對這邊的使用也沒有影響可是對IDE有良好的提示功能 $User->name = "phalcon"; $User->phone = "13011111111"; $User->passwd = "passwd"; //執行操做 $ret = $User->save(); //對結果進行驗證 if ($ret) { echo "寫入數據成功"; } else { //若是插入失敗處理打印報錯信息 echo "寫入數據庫失敗了"; foreach ($User->getMessages() as $message) { echo $message->getMessage(), "<br/>"; } } echo '<h1>BasemodelController/select!</h1>'; }
咱們試着運行一下控制器:
http://phalcon.w-blog.cn/phalcon/BaseModel/insert
這個時候咱們去數據庫裏面查詢一下user表就能看到咱們想要插入的數據了:
###2.2 查詢###
phalcon很是貼心的給咱們提供了不少方便的操做函數來進行快捷的查詢操做好比下面要說道的靜態方法find,咱們創建一個方法來試試:
public function selectAction() { $rs = User::find(1); var_dump($rs->toArray()); echo '<h1>BasemodelController/select!</h1>'; }
find函數是獲取主鍵id等於傳參的那一行數據,這裏要注意phalcon全部的查詢以後返回的都是一個對象,須要轉換成數組須要使用toArray函數,結果以下:
這樣就很簡單的查詢出了咱們想要的數據,固然查詢遠不止如此,在這裏對簡單的操做進行一個舉例你們能夠手動嘗試一下:
//查詢出全部的記錄 $rs = User::find(); var_dump($rs->toArray()); echo '</br>'; echo '</br>'; //經過where條件進行查詢匹配的 $rs = User::find("name = 'phalcon'"); echo "名稱爲'phalcon的用戶有'", count($rs), "個\n</br>"; echo '</br>'; // 獲取名稱爲phalcon的用戶而且經過phone排序 $rs = User::find(array( "name = 'phalcon'", "order" => "phone" )); foreach ($rs as $user) { echo $user->name, "\n"; echo $user->phone, "\n"; echo '</br>'; } echo '</br>'; // 獲取經過name排序的前100條數據 $rs = User::find(array( "order" => "name", "limit" => 100 )); foreach ($rs as $user) { echo $user->name, "\n"; echo '</br>'; } //經過findFirst能夠獲取第一條符合查詢條件的結果 能夠和find同樣加入條件 $rs = User::findFirst(); echo "第一個用戶的名稱爲 ", $rs->name, "\n";
結果以下:
###2.3 改###
phlacon提供的修改方式有兩種,一種是直接修改經過本身指定ID和須要修改的值好比:
public function updateAction() { $User = new User(); $User->id = 1; $User->name = "test"; //執行操做 $ret = $User->save(); //對結果進行驗證 if ($ret) { echo "修改數據成功"; } else { //若是插入失敗處理打印報錯信息 echo "修改數據庫失敗了"; foreach ($User->getMessages() as $message) { echo $message->getMessage(), "<br/>"; } } }
可是這樣會有個問題其餘參數都是默認的null會被覆蓋掉,否則就要對全部的參數從新賦值,
還有一種方式就是先查詢而後在修改,上面有說過phalcon查詢出來的都是返回對象形式,這樣也是優點以下
$User = User::findFirst(1); $User->phone = "13111111111"; //執行操做 $ret = $User->save();
這裏不能使用find查詢,咱們就值蛋蛋改變了ID爲1的phone值:
###2.4 刪除###
刪除其實能夠不用多說,操做很簡單
public function deleteAction() { $User = new User(); $User->id = 1; //執行操做 $ret = $User->delete(); //對結果進行驗證 if ($ret) { echo "刪除數據成功"; } else { //若是插入失敗處理打印報錯信息 echo "刪除數據庫失敗了"; foreach ($User->getMessages() as $message) { echo $message->getMessage(), "<br/>"; } } }
這樣ID爲1的數據就已經被刪除掉了
##3. 小結##
本小節主要講了最最基礎的數據操做,在下一節會更深刻的進行平常會用到的更多的數據操做進行舉例演示,那麼咱們今天的教程就到這裏,謝謝你們的支持!
注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!
Phalcon技術交流:364520707 PhalCon中文社區:287484785 歡迎你們的加入!