phalcon-入門篇7(Model層基礎使用)
#phalcon-入門篇7(Model層基礎使用)#
本教程基於phalcon2.0.9版本
##前言## 先在這裡感謝各位phalcon技術愛好者,我們提供這樣一個優秀的交流平臺
離上一次更新已經有一段時間了,主要是最近工作比較繁忙,在就是phalcon的model層確實是一塊難吭的骨頭,這邊打算分成多個小節對model從淺到深進行了解,對於一些深入的功能將會放到比較後面的章節結合例子進行說明,那麼開始今天的嗎model初體驗之旅
注:筆者水平有限,說的不正確的地方希望大家多多指正,一同交流技術
附上:
喵了個咪的部落格:http://w-blog.cn
教程程式碼庫:http://git.oschina.net/wenzhenxi/Phalcon-tutorial
phalcon官網地址:https://phalconphp.com
phalcon中文社群:http://www.iphalcon.cn/
##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 PhalconDbAdapterPdoMysql 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 PhalconMvcModel;
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 歡迎大家的加入!