ThinkPHP
數據庫操作
數據庫連接
#在config/database.php設置數據庫連接參數或者利用Db::connect()方法設置數據庫連接 /* * public static function connect($config = [], $name = false) * 數據庫初始化,並取得數據庫類實例 * $config:數據庫配置信息數組,可以在該方法里面進行配置 */ # var_dump(Db::connect());
數據庫查找
query
:直接操作sql
語句
/* * mixed query(string $sql, array $bind = [], boolean $master = false, bool $pdo = false) * 描述:SQL查詢語句,然后array類型 * $sql:SQL語句字符串 * $bind:SQL語句中綁定的字符串 */ $res = Db::query('select * from book where id=?', [1001]);
常用查詢語句
# select 返回所有記錄,返回的結果是一個二維數組 # 如果結果不存在,返回一個空數組'[]' $res = Db::table('book') ->where([ 'id' => '1001' ])->select(); $res = db('book') ->where([ 'id' => '1001' ])->select(); #功能同上 # find 返回一條記錄,返回的結果是一個一維數組 # 如果結果不存在,返回null $res = Db::table('book') ->where([ 'id' => '1002' ])->find(); $res = db('book') ->where([ 'id' => '1001' ])->find(); #功能同上 # value 返回一條記錄,並且是這條記錄的某個字段值 # 如果結果不存在,返回null $res = Db::table('book') ->where([ 'id' => '1001' ])->value('name'); $res = db('book') ->where([ 'id' => '1001' ])->value('name'); #功能同上 # column 返回一個一緯數組,數組中的value值就是我們要獲取列的值 # 如果結果不存在,返回空數組'[]' $res = Db::table('book') -> where([ 'id' => '1001' ]) -> column('name'); $res = db('book') ->where([ 'id' => '1001' ])->column('name'); #功能同上
數據庫添加execute
:直接操作sql
語句
/* * integer execute(string $sql, array $bind = [], boolean $fetch = false, boolean $getLastInsID = false, string $sequence = null) * 描述:SQL更新語句 * $sql:SQL語句字符串 * $bind:SQL語句中綁定的字符串 */ $res = Db::execute('select * from book where id=?', [1002]);
常用插入語句
public function insert() { //指定數據庫表,獲取表資源 $db = Db::name('book'); # $db ->insert():插入單條記錄,返回是影響記錄的行數 # $db ->insertGetId():插入單條記錄,返回的是插入記錄的id # $db ->insertAll():批量插入 //inset 返回值是影響記錄的行數,插入數 $res = $db ->insert([ 'id' => '1005', 'name' => '書籍5', 'type_id' => '1', 'author' => '趙六', 'press' => '牛津大學出版社' ]); dump($res); }
數據庫更新
public function update() { //指定數據庫表 $db = Db::name('book'); # $db->update() # 更新記錄某一個或幾個字段,返回值為影響記錄的行數 $res = $db ->where([ 'id' => 1001 ])->update([ 'author' => '比克' ]); # $db->setField() # 更新記錄下某一個字段的值,返回值為影響記錄的行數 $res = $db ->where([ 'id' => 1001 ])->setField('name', '書籍111'); # $db->setInc() # 更新記錄下某一個字段按固定步長增長,返回值為影響記錄的行數 $res = $db ->where([ 'id' => 1001 ]) ->setInc('type_id', '2'); # $db->setDec() # 更新記錄下某一個字段按固定步長減小,返回值為影響記錄的行數 $res = $db ->where([ 'id' => 1001 ]) ->setDec('type_id', '2'); dump($res); }
數據庫刪除
public function delete() { //指定數據庫表 $db = Db::name('book'); #返回值為影響記錄的行數 $res = $db->where([ 'id' => 1001 ])->delete(); #如果where條件中是主鍵,則可以寫為: $res = $db->delete('1002'); dump($res); }
鏈式操作
$res3 = Db::table('book') -> where('id', '>', '1004') #查詢條件where($field, $op, $condition) -> field('name, press') #過濾條件field -> order('id DESC') #排序方式order,DESC降序,ASC升序 # -> limit(3, 5) #記錄條數限制limit # -> page(2,5) #分頁功能page -> group('press') #分組group -> select();
模型
獲取model
對象
public function requireModel() { #方式1:使用助手函數獲取model實例對象 $book = model('Book'); $book1 = $book::get('1001'); #方式2:使用Loader獲取model實例對象 $book = Loader::model('Book'); $book2 = $book::get('1001'); #方式3:使用new方法獲取實例對象 $book = new Book(); $book3 = $book::get('1001'); #方式4:靜態方法直接獲取實例對象(推薦使用) $book4 = Book::get(1001); dump($book1->toArray()); dump($book2->toArray()); dump($book3->toArray()); dump($book4->toArray()); }
模型查詢數據
public function getBook($bookId) { #get進行查找單條記錄 $book = Book::get($bookId); #方法1 $book = Book::get(function ($query){ #方法2 $query->where('id', '>', 1001) ->field('name'); }); $name = $book->name; #調用模型的屬性 $res = $book->toArray(); #將模型轉換為數組 #get獲取批量記錄 $books = Book::all(); $book = Book::all(function ($query){ #方法2 $query->where('id', '>', 1001) ->field('name'); }); foreach ($books as $value) { #遍歷循環打印 #dump($value->toArray()); } #和Db相似的鏈式方法:find()方法查找單條記錄 $res = Book::where('id', '=', '1001') ->field('name, author') ->find(); #dump($res->toArray()); #select()方法查找多條記錄 $res = Book::where('id', '>', '1001') ->field('name, author') ->select(); foreach ($res as $value) { #遍歷循環打印 #dump($value->toArray()); } #value():獲取單條記錄某個字段的值 $res = Book::value('press'); #column():所有多條記錄某個字段的值 $res = Book::column('press', 'press'); dump($res); }
模型添加數據
public function insertBook($bookId) { #方式1:Book::create插入單條數據 $book = Book::create([ 'id' => $bookId, 'name' => '書籍21', 'type_id' => 1, 'author' => "作者{$bookId}", 'press' => '清華大學出版社' ]); #方式2:save()插入單條數據 $book = new Book(); $book->id = 1000 + (integer)($bookId); $book->name = "書籍{$bookId}"; $book->type_id = 1; $book->author = "作者{$bookId}"; $book->press = '清華大學出版社'; $book->save(); $book1 = new Book(); #插入快捷方式 $book1->save([ 'id' => 1000 + (integer)($bookId), 'name' => "書籍{$bookId}", 'type_id' => 1, 'author' => "作者{$bookId}", 'press' => '清華大學出版社' ]); #方式3:saveAll()插入批量數據 $res = $book1 ->saveAll([ [ 'name' => "書籍{$bookId}", ], [ 'name' => "書籍{$bookId}", ] ]); dump($res); }
模型更新數據
public function updateBook() { //更新數據 $res = Book::update([ 'author' => '作者11' ], function ($query){ $query->where('id', '=', '1001'); }); #更新數據 $res = Book::where('id', '=', '1002') ->update([ 'author' => '作者22' ]); #通過save()來更新已經有的model $book = Book::get(1001); $book ->author = '作者1'; $book ->save(); dump($book->toArray()); }
模型刪除數據
public function deleteBook() { #Book::destroy() #如果當前表存在主鍵,直接傳值 #$res = Book::destroy(1001); #如果當前表不存在主鍵,則可以根據$query函數進行條件刪除 #$res = Book::destroy(function ($query){ # $query->where('id', '=', '1002'); #}); #通過實例進行刪除 #$book = Book::get(1003); #$res = $book ->delete(); #通過where條件進行刪除 $res = Book::where('id', '>', 1000) ->delete(); dump($res); }
模型聚合操作
class Book extends Model { #屬性和數據庫表字段映射 protected $createTime = 'create_time'; protected $updateTime = 'update_time'; #獲取器:讀取數據庫中值的時候,在值的基礎上進行修改 public function getSexAttr($var) { switch ($var) { case 0: return '男'; break; case 1: return '女'; break; default: return '未知'; break; } } #修改器:對寫入數據庫中值進行修改 public function setPasswordAttr($var) { return md5($var); } #自動完成功能 protected $auto = [ #數據插入或更新的時候,對字段進行更新 ]; protected $insert = [ #插入時候,對字段進行更新 'create_time' ]; protected $update = [ #更新時候,對字段進行更新 'modify_time' ]; #綁定數據庫中create_time字段 public function setCreateTimeAttr($var) { return time(); } #綁定數據庫中modify_time字段 public function setModifyTimeAttr($var) { return time(); } }