ThinkPHP中資料庫CRUD操作方法盤點(limit、page、table、order、data方法)
limit方法
limit方法也是模型類的連貫操作方法之一,主要用於指定查詢和操作的數量,特別在分頁查詢的時候使用較多。ThinkPHP的limit方法可以相容所有的資料庫驅動類的。
用法
限制結果數量
例如獲取滿足要求的10個使用者,如下呼叫即可:
$User = M('User');
$User->where('status=1')->field('id,name')->limit(10)->select();
limit方法也可以用於寫操作,例如更新滿足要求的3條資料:
$User = M('User');
$User->where('score=100' )->limit(3)->save(array('level'=>'A'));
分頁查詢
用於文章分頁查詢是limit方法比較常用的場合,例如:
$Article = M('Article');
$Article->limit('10,25')->select();
表示查詢文章資料,從第10行開始的25條資料(可能還取決於where條件和order排序的影響 這個暫且不提)。
在3.1版本後,你也可以這樣使用:
$Article = M('Article');
$Article->limit(10,25)->select();
對於大資料表,儘量使用limit限制查詢結果,否則會導致很大的記憶體開銷和效能問題。
page方法
page方法也是模型的連貫操作方法之一,是完全為分頁查詢而誕生的一個人性化操作方法。
用法
我們在前面已經瞭解了關於limit方法用於分頁查詢的情況,而page方法則是更人性化的進行分頁查詢的方法,例如還是以文章列表分頁為例來說,如果使用limit方法,我們要查詢第一頁和第二頁(假設我們每頁輸出10條資料)寫法如下:
$Article = M('Article');
$Article->limit('0,10')->select(); // 查詢第一頁資料
$Article->limit('10,10')->select(); // 查詢第二頁資料
雖然利用擴充套件類庫中的分頁類Page可以自動計算出每個分頁的limit引數,但是如果要自己寫就比較費力了,如果用page方法來寫則簡單多了,例如:
$Article = M('Article');
$Article->page('1,10')->select(); // 查詢第一頁資料
$Article->page('2,10')->select(); // 查詢第二頁資料
顯而易見的是,使用page方法你不需要計算每個分頁資料的起始位置,page方法內部會自動計算。
3.1版本以後,page方法也支援2個引數的寫法,例如:
$Article->page(1,10)->select();
和
$Article->page('1,10')->select();
等效。
page方法還可以和limit方法配合使用,例如:
$Article->limit(25)->page(3)->select();
當page方法只有一個值傳入的時候,表示第幾頁,而limit方法則用於設定每頁顯示的數量,也就是說上面的寫法等同於:
$Article->page('3,25')->select();
table方法
table方法也屬於模型類的連貫操作方法之一,主要用於指定操作的資料表。
用法
一般情況下,操作模型的時候系統能夠自動識別當前對應的資料表,所以,使用table方法的情況通常是為了:
切換操作的資料表;
對多表進行操作;
例如:
$Model->table('think_user')->where('status>1')->select();
也可以在table方法中指定資料庫,例如:
$Model->table('db_name.think_user')->where('status>1')->select();
需要注意的是table方法不會改變資料庫的連線,所以你要確保當前連線的使用者有許可權操作相應的資料庫和資料表。
切換資料表後,系統會自動重新獲取切換後的資料表的欄位快取資訊。
如果需要對多表進行操作,可以這樣使用:
$Model->field('user.name,role.title')->table('think_user user,think_role role')->limit(10)->select();
為了儘量避免和mysql的關鍵字衝突,可以建議使用陣列方式定義,例如:
$Model->field('user.name,role.title')->table(array('think_user'=>'user','think_role'=>'role'))->limit(10)->select();
order方法
order方法屬於模型的連貫操作方法之一,用於對操作的結果排序。
用法
$Model->where('status=1')->order('id desc')->limit(5)->select();
注意:連貫操作方法沒有順序,可以在select方法呼叫之前隨便改變呼叫順序。
支援對多個欄位的排序,例如:
$Model->where('status=1')->order('id desc,status')->limit(5)->select();
如果沒有指定desc或者asc排序規則的話,預設為asc。
如果你的欄位和mysql關鍵字有衝突,那麼建議採用陣列方式呼叫,例如:
$Model->where('status=1')->order(array('order','id'=>'desc'))->limit(5)->select();
data方法
data方法也是模型類的連貫操作方法之一,用於設定當前要操作的資料物件的值,可能大家不太習慣用這個方法,今天來講解下如何用好data方法。
用法
寫操作
通常情況下我們都是通過create方法或者賦值的方式生成資料物件,然後寫入資料庫,例如:
$Model = D('User');
$Model->create();
// 這裡略過具體的自動生成和驗證判斷
$Model->add();
又或者直接對資料物件賦值,例如:
$Model = M('User');
$Model->name = '流年';
$Model->email = '[email protected]';
$Model->add();
那麼data方法則是直接生成要操作的資料物件,例如:
$Model = M('User');
$data['name'] = '流年';
$data['email'] = '[email protected]';
$Model->data($data)->add();
注意:如果我們同時使用create方法和data建立資料物件的話,則後呼叫的方法有效。
data方法支援陣列、物件和字串,物件方式如下:
$Model = M('User');
$obj = new stdClass;
$obj->name = '流年';
$obj->email = '[email protected]';
$Model->data($obj)->add();
字串方式用法如下:
$Model = M('User');
$data = 'name=流年&[email protected]';
$Model->data($data)->add();
也可以直接在add方法中傳入資料物件來新增資料,例如:
$Model = M('User');
$data['name'] = '流年';
$data['email'] = '[email protected]';
$Model->add($data);
但是這種方式data引數只能使用陣列。
當然data方法也可以用於更新資料,例如:
$Model = M('User');
$data['id'] = 8;
$data['name'] = '流年';
$data['email'] = '[email protected]';
$Model->data($data)->save();
當然我們也可以直接這樣用:
$Model = M('User');
$data['id'] = 8;
$data['name'] = '流年';
$data['email'] = '[email protected]';
$Model->save($data);
同樣,此時data引數只能傳入陣列。
在呼叫save方法更新資料的時候 會自動判斷當前的資料物件裡面是否有主鍵值存在,如果有的話會自動作為更新條件。也就是說,下面的用法和上面等效:
$Model = M('User');
$data['name'] = '流年';
$data['email'] = '[email protected]';
$Model->data($data)->where('id=8')->save();
讀操作
除了寫操作外,data方法還可以用於讀取當前的資料物件,例如:
$User = M('User');
$map['name'] = '流年';
$User->where($map)->find();
// 讀取當前資料物件
$data = $User->data();
相關推薦
ThinkPHP中資料庫CRUD操作方法盤點(limit、page、table、order、data方法)
limit方法 limit方法也是模型類的連貫操作方法之一,主要用於指定查詢和操作的數量,特別在分頁查詢的時候使用較多。ThinkPHP的limit方法可以相容所有的資料庫驅動類的。 用法 限制結果數量 例如獲取滿足要求的10個使用者,如下呼叫即可:
thinkphp之資料庫更新操作方法save
更新資料 更新資料使用save方法,例如: $User = M("User");// 例項化User物件$condi=array('eq',$id); // 要修改的資料物件屬性賦值$data['name']='ThinkPHP';$data['email']='[emai
Java 8 Streams 中的資料庫 CRUD 操作
接觸一個新工具的時候,剛開始要克服的最大障礙就是如何讓你自己先嚐試做出一個小東西來。現在你也許對 Java 8 中 新的 Stream API 的運作方式在理解上比較自信,但你也許並沒用它來進行過資料庫查詢操作。為了幫助你開始使用 Stream API 來對 SQL 資料
ThinkPHP中資料庫操作返回值總結
文章轉自:http://www.baiwar.com/post/thinkphp-database-operations-in-the-return-value.html Thinkphp中的Think\Model類提供了資料庫的基本CURD(Create、Update
12c容器資料庫匯入操作_筆記(Linux/oracle借用shell工具匯入資料檔案操作)
Linux/oracle借用shell工具匯入資料檔案操作 一、使用shell工具,遠端連線到Linux下的oracle資料庫服務上 Xshell 6 (Build 0095) Copyright (c) 2002 NetSarang Computer, Inc. All rights reserved
Mybatis --03.mybatis中的CRUD操作
1、編寫UserDao介面 UserDao.java package com.sswblog.dao; import com.sswblog.domain.User; import java.util.List; /** * @ Author :ShaoWei
hibernate 中資料庫連線操作
hibernate.cfg.xml 中配置 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate
程式中資料庫的操作歷史和對資料庫操作的實體類注意事項
稍微瞭解一下程式中資料庫操作歷史吧! 1.首先是JDBC連線 2.c3p0 3.JPA JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中. 4.hibernate &nb
jQuery 文件操作方法大全(也適用於 XML 文件和 HTML 文件)
jQuery 文件操作方法 這些方法對於 XML 文件和 HTML 文件均是適用的,除了:html()。 方法 描述 在匹配的元素之後插入內容。 向匹配元素集合中的每個元素結尾插入由引數指定的內容。 向目標結尾插入匹配元素集合中的每個元素。 設定或返
日期類加減及Java中日期類操作演算法大全 (轉)
計算 兩日期間隔天數 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; pub
centos7中keeplived代碼隨記(虛擬機做的真的坑,多練吧)
備份服務器 ash ipv4 pts firefox keepal live 功能 arp 調度服務器地址192.168.100.100節點1 192.168.100.110節點2 192.168.100.120 -------------------------DR調度服
JS中arguments物件的常見用法(轉自https://www.cnblogs.com/LMJBlogs/p/6024148.html)
瞭解這個物件之前先來認識一下javascript的一些功能: 其實Javascript並沒有過載函式的功能,但是Arguments物件能夠模擬過載。Javascrip中每個函式都會有一個Arguments物件例項arguments,它引用著函式的實參,可以用陣列下標的方式"[]"引用arguments的元素
大資料工作中常用的20條語句(hive,yarn,Linux,正則表示式等)
1.檢視hadoop任務 yarn application -list |grep 使用者名稱 yarn application -kill application_1443009203033_86621 2.liunx nohup命令 nohup ./label_driver.sh >
Java處理excel匯入資料庫日期格式的處理(24時制變為12時制問題的處理)
最近做excel匯入時碰到一個時間時制的問題 excel文件裡是24時制的,結果匯入到資料庫發現是12時制的,最後在360doc上找到了解決問題,這裡是記錄下自己的理解和處理方法。 首先:文件裡的時間格式 匯入到資料庫的格式 Java程式碼實現之前請確保匯入了jxl.
請說出三種減少頁面載入時間的方法。(載入時間指感知的時間或者實際載入時間)
1、減少http請求(合併檔案、合併圖片) 2、優化圖片檔案,減小其尺寸,特別是縮圖,一定要按尺寸生成縮圖然後呼叫,不要在網頁中用resize方法實現,雖然這樣看到的圖片外形小了,但是其載入的資料量一點也沒減少。曾經見過有人在網頁中載入的縮圖,其真實尺寸有10M之巨…普通影象、icon也要儘可能壓縮後,可以
Maven中指定預設的JDK版本(若不指定,則預設的為5.0)
maven中jdk的配置分為全域性配置和區域性配置兩種方式。 全域性配置 全域性配置是指在${MAVEN_HOME}\conf\settings.xml中進行配置,注${MAVEN_HOME}指的是maven的安裝目錄。例如,要配置jdk1.8,開啟settings
php中跟時間有關的處理(時區設定,計算時間差,獲取系統當前時間)
1、修改時區背景 :儲存到Navicat中的時間和本地系統時間相差8小時原因:在app/config下的app.php中有一行['timezone' => 'UTC',}規定的是時區預設是UTC ,即協調世界時,又稱世界統一時間、世界標準時間、國際協調時間
python中操作mysql資料庫CRUD(增刪改查)
python高階應用與資料分析學習筆記 05 1、mysql的安裝 安裝成功是這樣子的 2、pymysql的安裝 一如既往的使用Ancoda來安裝python軟體,
java Integer中的方法解析(位操作)
方法 描述 static int bitCount(int i) 返回i的二進位制中1的個數. static int compare(int x, int y)
JDBC上關於資料庫中多表操作一對多關係和多對多關係的實現方法--轉
原文地址---- https://www.cnblogs.com/pangguoming/p/7028322.html 黑馬程式設計師 我們知道,在設計一個Java bean的時候,要把這些BEAN 的資料存放在資料庫中的表結構,然而這些資料庫中的表直接又有些特殊