首頁 php教程 PHP开发 CodeIgniter學習筆記 Item5--CI中的AR

CodeIgniter學習筆記 Item5--CI中的AR

Dec 29, 2016 am 10:23 AM

AR(Active Record)

在啟用AR的情況下(CI3.0預設已經啟動並且沒有配置項),透過

$this->db
登入後複製


的get方法可以獲得一張表的結果集

[code]// AR会自动加上表前缀,因此get方法中的表名不用加上表前缀
$res = $this->db->get('user');
foreach ($res->result() as $item)
{
    echo $item->name . "
"; }
登入後複製


方法可以簡單的插入一筆記錄,參數是表名和關聯數組

[code]$data = array('name'=>'mary', 'password'=>md5('mary'));
$result = $this->db->insert('user', $data);
登入後複製


透過update方法修改記錄,第一個參數是表明,第二個參數是修改後的內容,用關聯數組表示,第三個參數是查詢條件

[code]$data = array ('email'=>'mary@gmail.com', 'password'=>md5('123456'));
$this->db->update('user', $data, array('name'=>'mary'));
登入後複製


透過delete方法刪除一筆記錄,參數一是表名,參數二是查詢條件

[code]$this->db->delete('user', array('name'=>'mary'));
登入後複製




連貫操作,對於比較複雜的SQL使用AR提供的連貫操作進行查詢

[code]$result = $this->db->select('id, name')
            ->from('user')
            ->where('id >=', 1)
            ->limit(3,1)
            ->order_by('id desc ')
            ->get();
登入後複製


注意:limit的參數順序與SQL中的順序是相反的,第一個參數表示顯示的條數,第二個參數表示跳過的條數

不同查詢條件下where語句的寫法

[code]where('name', 'mary')或where('name =', 'mary'):表示查询条件是name字段值是mary
where(array('name'=>'mary', 'id >'=>'1'));:表示查询条件有两个,name字段值是mary并且id字段值是1
登入後複製

透過last_query()方法可以獲得透過連貫操作,由AR拼裝的SQL語句

[code]$this->db->last_query();
登入後複製

透過AR只能執行比較簡單的查詢,如果是比較簡單的查詢,建議使用$this->db->query($sql, $data)
進行查詢

選擇資料 

下面的函數來幫助你建立SQL SELECT語句。

備註:如果你正在使用 PHP5,你可以在複雜情況下使用鍊式語法。本頁面底部有具體描述。

[code]$this->db->get();
登入後複製

運行選擇查詢語句並且傳回結果集。可以取得一個表格的全部資料。

[code]$query = $this->db->get('mytable');
// Produces: SELECT * FROM mytable
登入後複製

第二和第三個參數允許你設定一個結果集每頁紀錄數(limit)和結果集的偏移(offset)

[code]$query = $this->db->get('mytable', 10, 20);
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
登入後複製


注意:第二參數是每頁紀錄數,第三個參數是偏移

你會注意到上面的函數由一個變數$query
執行,這個$query
可以用來顯示結果集。

[code]$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
    echo $row->title;
}
[code]$this->db->get_where();
登入後複製


跟上面的函數一樣,只是它允許你在函數的第二個參數那裡添加一個where 從句,從而不用使用db->where() 這個函數:

[code]$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
登入後複製

注意: get_where: get_where在先前的版本中寫作getwhere(),這是已經過時的用法,現在已從程式碼中移除getwhere()。

[code]$this->db->select();
登入後複製

允許你在SQL查詢中寫 SELECT 部分:

[code]$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// Produces: SELECT title, content, date FROM mytable
登入後複製

注意: 如果你要查詢表中的所有行,你可以不用寫這個函數。省略後,CodeIgniter 會認為你要查詢全部行(SELECT *)。

$this->db->select()
登入後複製
[code]$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 
$query = $this->db->get('mytable');
登入後複製

關聯數組方式: 

[code]$array = array('title' => $match, 'page1' => $match, 'page2' => $match);
$this->db->like($array); 
// WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'
$this->db->or_like();
登入後複製

本函數與上面那個函數幾乎完全相同,唯一的區別是多個實例之間是用OR 連接起來的:

) 曾經被稱為orlike(), 後者已經過時,現已從程式碼移除orlike()。



[code]$this->db->like('title', 'match');
$this->db->or_like('body', $match); 
// WHERE title LIKE '%match%' OR body LIKE '%match%'
登入後複製

本函數與like() 幾乎完全相同,唯一的區別是它產生NOT LIKE 語句:


[code]$this->db->not_like();
登入後複製

本函數與not_like() 幾乎完全相同,唯一的區別是多個實例之間是多個實例之間是用OR 連接起來的:


[code]$this->db->not_like('title', 'match');
// WHERE title NOT LIKE '%match%
$this->db->or_not_like();
登入後複製

允許你寫查詢語句中的GROUP BY 部分:



[code]$this->db->like('title', 'match');
$this->db->or_not_like('body', 'match'); 
// WHERE title LIKE '%match%' OR body NOT LIKE '%match%'
$this->db->group_by();
登入後複製

你也可以把多個值作為陣列曾經被稱為groupby(), 後者已經過時,現已從程式碼移除groupby()。


[code]$this->db->group_by("title"); 
// 生成: GROUP BY title
登入後複製

為查詢語句加上 「DISTINCT」 關鍵字:


[code]$this->db->group_by(array("title", "date")); 
// 生成: GROUP BY title, date
登入後複製

允許你為你的查詢語句寫 HAVING 部分。有兩種語法形式,一個或兩個參數都可以:



[code]$this->db->distinct();
登入後複製

如果你正在使用一個由CodeIgniter進行轉義保護的資料庫,為了避免內容轉義,你可以傳遞可選的第三個參數,並將其設定為FALSE。


[code]$this->db->distinct();
$this->db->get('table');
// 生成: SELECT DISTINCT * FROM table
$this->db->having();
登入後複製

與 having() 函數幾乎完全一樣,唯一的區別是多個子句之間是用 “OR” 分隔的。



[code]$this->db->having('user_id = 45'); 
// 生成: HAVING user_id = 45
$this->db->having('user_id', 45); 
// 生成: HAVING user_id = 45
你也可以把多个值通过数组传递过去:
[code]$this->db->having(array('title =' => 'My Title', 'id <' => $id)); 
// 生成: HAVING title = 'My Title', id < 45
登入後複製

幫助你設定一個 ORDER BY 子句。第一個參數是你想要排序的欄位名稱。第二個參數設定結果的順序,可用的選項包括 asc (升序)或 desc(降序), 或 random(隨機)。


[code]$this->db->having('user_id', 45); 
// 生成: HAVING `user_id` = 45 (在诸如MySQL等数据库中) 
$this->db->having('user_id', 45, FALSE); 
// 生成: HAVING user_id = 45
$this->db->or_having();
登入後複製

你也可以在第一個參數中傳遞你自己的字串:


[code]$this->db->order_by();
登入後複製

或者,多次呼叫本函數就可以排序多個欄位。


[code]$this->db->order_by("title", "desc"); 
// 生成: ORDER BY title DESC
登入後複製

說明: order_by() 曾經被稱為 orderby(), 後者已經過時,現已從程式碼中移除 orderby()。


說明: 目前 Oracle 和 MSSQL 的驅動程式還不支援隨機排序,將被預設為 ‘ASC’(升序)。

[code]$this->db->order_by('title desc, name asc'); 
// 生成: ORDER BY title DESC, name ASC
登入後複製

限制查詢所回傳的結果數量:


[code]$this->db->order_by("title", "desc");
$this->db->order_by("name", "asc"); 
// 生成: ORDER BY title DESC, name ASC
登入後複製

第二個參數設定的是結果偏移量。


[code]$this->db->limit(10, 20);
// 生成: LIMIT 20, 10 (仅限MySQL中。其它数据库有稍微不同的语法)
$this->db->count_all_results();
登入後複製

允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(),or_where()
, like(), or_like() 等等。范例:

[code]echo $this->db->count_all_results('my_table');
// 生成一个整数,例如 25
$this->db->like('title', 'match');
$this->db->from('my_table');
echo $this->db->count_all_results();
// 生成一个整数,例如 17
登入後複製

插入数据

[code]$this->db->insert();
登入後複製


生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。下面是一个使用数组的例子:

[code]$data = array(
               'title' => 'My title' ,
               'name' => 'My Name' ,
               'date' => 'My date'
            );
$this->db->insert('mytable', $data); 
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
登入後複製

第一个参数包含表名,第二个是一个包含数据的关联数组。

下面是一个使用对象的例子:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->insert('mytable', $object); 
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
登入後複製


第一个参数包含表名,第二个是一个对象。(原文有错:The first parameter will contain the table name, the second is an associative array of values.)

注意: 所有的值已经被自动转换为安全查询。

[code]$this->db->set();
登入後複製

本函数使您能够设置inserts(插入)或updates(更新)值。

它可以用来代替那种直接传递数组给插入和更新函数的方式:

[code]$this->db->set('name', $name); 
$this->db->insert('mytable'); 
// 生成: INSERT INTO mytable (name) VALUES ('{$name}')
登入後複製

如果你多次调用本函数,它们会被合理地组织起来,这取决于你执行的是插入操作还是更新操作:

[code]$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');
登入後複製


set() 也接受可选的第三个参数($escape),如果此参数被设置为 FALSE,就可以阻止数据被转义。为了说明这种差异,这里将对 包含转义参数 和 不包含转义参数 这两种情况的 set() 函数做一个说明。

[code]$this->db->set('field', 'field+1', FALSE);
$this->db->insert('mytable'); 
// 得到 INSERT INTO mytable (field) VALUES (field+1)
$this->db->set('field', 'field+1');
$this->db->insert('mytable'); 
// 得到 INSERT INTO mytable (field) VALUES ('field+1')
登入後複製

你也可以将一个关联数组传递给本函数:

[code]$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->set($array);
$this->db->insert('mytable');
登入後複製

或者一个对象也可以:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->set($object);
$this->db->insert('mytable');
登入後複製

更新数据

[code]$this->db->update();
登入後複製

根据你提供的数据生成并执行一条update(更新)语句。你可以将一个数组或者对象传递给本函数。这里是一个使用数组的例子:

[code]$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );
$this->db->where('id', $id);
$this->db->update('mytable', $data); 
// 生成:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
登入後複製

或者你也可以传递一个对象:

[code]/*
    class Myclass {
        var $title = 'My Title';
        var $content = 'My Content';
        var $date = 'My Date';
    }
*/
$object = new Myclass;
$this->db->where('id', $id);
$this->db->update('mytable', $object); 
// 生成:
// UPDATE mytable 
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
登入後複製

说明: 所有值都会被自动转义,以便生成安全的查询。

你会注意到

$this->db->where()
登入後複製
[code]$this->db->update('mytable', $data, "id = 4");
登入後複製

或者是一个数组:

[code]$this->db->update('mytable', $data, array('id' => $id));


在进行更新时,你还可以使用上面所描述的 $this->db->set() 函数。

删除数据

[code]$this->db->delete();
登入後複製

生成并执行一条DELETE(删除)语句。

[code]$this->db->delete('mytable', array('id' => $id)); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
登入後複製

第一个参数是表名,第二个参数是where子句。你可以不传递第二个参数,使用 where() 或者 or_where() 函数来替代它:

[code]$this->db->where('id', $id);
$this->db->delete('mytable'); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
登入後複製


如果你想要从一个以上的表中删除数据,你可以将一个包含了多个表名的数组传递给delete()函数。

[code]$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);
登入後複製

如果你想要删除表中的全部数据,你可以使用 truncate() 函数,或者 empty_table() 函数。

[code]$this->db->empty_table();
登入後複製

生成并执行一条DELETE(删除)语句。

[code] $this->db->empty_table('mytable'); 
// 生成
// DELETE FROM mytable
$this->db->truncate();
登入後複製


生成并执行一条TRUNCATE(截断)语句。

[code]$this->db->from('mytable'); 
$this->db->truncate(); 
// 或 
$this->db->truncate('mytable'); 
// 生成:
// TRUNCATE mytable
登入後複製

说明: 如果 TRUNCATE 命令不可用,truncate() 将会以 “DELETE FROM table” 的方式执行。

链式方法

链式方法允许你以连接多个函数的方式简化你的语法。考虑一下这个范例:

[code]$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
登入後複製

 以上就是CodeIgniter学习笔记 Item5--CI中的AR的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

XREAL 創辦人徐馳:蘋果讓大家看到空間運算的未來,我們努力讓大家看到空間運算的現在 XREAL 創辦人徐馳:蘋果讓大家看到空間運算的未來,我們努力讓大家看到空間運算的現在 Jun 02, 2024 pm 07:55 PM

XREAL在空間運算新品發表會上推出了全新產品-XREALBeamPro,售價1,299元起。根據官方介紹,XREALBeamPro是一款將2D應用逐漸釋放到3D空間的計算終端,配備XREALAR眼鏡,將構成“消費級AR空間計算完全體”,並將用戶從手機側的遷移成本降至最低。在設計上,XREALBeamPro看起來像智慧型手機,但並非手機產品,而是配備觸控顯示器的空間運算終端。官方對其的定位為「像Phone一樣的AR空間計算終端」。在發表會上,XREAL創辦人兼CEO徐馳對BeamPro的能力

如何在CodeIgniter中實作自訂中介軟體 如何在CodeIgniter中實作自訂中介軟體 Jul 29, 2023 am 10:53 AM

如何在CodeIgniter中實現自訂中間件引言:在現代的Web開發中,中間件在應用程式中起著至關重要的作用。它們可以用來執行在請求到達控制器之前或之後執行一些共享的處理邏輯。 CodeIgniter作為一個流行的PHP框架,也支持中間件的使用。本文將介紹如何在CodeIgniter中實作自訂中間件,並提供一個簡單的程式碼範例。中間件概述:中間件是一種在請求

如何使用PHP建構AR/VR應用 如何使用PHP建構AR/VR應用 Jun 11, 2023 pm 07:22 PM

隨著AR(擴增實境)和VR(虛擬實境)的發展,這兩項技術已經成為了創新和體驗的重要組成部分。隨著PHP作為網路程式語言的流行,使得PHP成為了開發AR/VR應用的可行性選擇。本文將介紹如何使用PHP建構AR/VR應用。 1.了解AR和VR技術在開始創建AR/VR應用程式之前,我們需要了解不同的技術和函式庫。 AR技術允許虛擬物件或資訊與現實世界的環境進行互動。 V

微軟探索使用微透鏡陣列進行大範圍主射線角操縱的AR/VR專利 微軟探索使用微透鏡陣列進行大範圍主射線角操縱的AR/VR專利 Sep 30, 2023 pm 09:29 PM

(映維網Nweon2023年09月26日)微軟認為,MicroLED具有體積小、重量輕、亮度高、封裝密度高的特點,可能特別適合用於需要高解析度、小尺寸和輕重量的頭戴式顯示器。在名為」Microlensesprovidingwiderangechiefrayanglemanipulationforapaneldisplay「的專利申請中,微軟介紹了一種為面板顯示提供大範圍主射線角操縱的微透鏡,以及配置所述微透鏡陣列的顯示系統。其中,陣列中的每個微透鏡對應於面板顯示器的各自像素。微透鏡的配置根據它們

CodeIgniter中間件:加速應用程式的反應速度和頁面渲染 CodeIgniter中間件:加速應用程式的反應速度和頁面渲染 Jul 28, 2023 pm 06:51 PM

CodeIgniter中間件:加速應用程式的反應速度和頁面渲染概述:隨著網頁應用程式的複雜性和互動性不斷增長,開發人員需要使用更有效率和可擴展的解決方案來提高應用程式的效能和反應速度。 CodeIgniter(CI)是一種基於PHP的輕量級框架,提供了許多有用的功能,其中之一就是中間件。中間件是在請求到達控制器之前或之後執行的一系列任務。這篇文章將介紹如何使用

莫界科技首度登場CES,領先引領AR創新潮流! 莫界科技首度登場CES,領先引領AR創新潮流! Jan 14, 2024 pm 09:06 PM

1月9日-12日,超過4000家展商聚集在消費性電子「春晚」CES上。作為消費級AR領域的創新企業,莫界科技首次參展CES,全面展示了中國AR企業在核心器件、整機方案和客製化服務方面的強大實力。在莫界展台上,展示的基於雙目樹脂衍射光波導+MicroLED的AR眼鏡,引起了眾多觀眾的興趣,他們紛紛試戴並體驗了其功能。這款AR眼鏡具備了許多實用的特色。首先,配戴者可以透過眼鏡鏡片即時查看文字內容,這使得閱讀更加方便。其次,眼鏡內建了麥克風,可以收集語音訊息,並透過即時翻譯功能將其轉化為指定語言的文本,

在CodeIgniter框架中使用資料庫查詢建構器(Query Builder)的方法 在CodeIgniter框架中使用資料庫查詢建構器(Query Builder)的方法 Jul 28, 2023 pm 11:13 PM

在CodeIgniter框架中使用資料庫查詢建構器(QueryBuilder)的方法引言:CodeIgniter是一個輕量級的PHP框架,它提供了許多功能強大的工具和函式庫,方便開發人員進行Web應用程式開發。其中一個令人印象深刻的功能是資料庫查詢建構器(QueryBuilder),它提供了一種簡潔而強大的方法來建立和執行資料庫查詢語句。本文將介紹如何在Co

NTT QONOQ Devices 推出適用於智慧型手機的 Mirza 無線 XR 眼鏡 NTT QONOQ Devices 推出適用於智慧型手機的 Mirza 無線 XR 眼鏡 Sep 09, 2024 pm 06:30 PM

NTT QONOQ Devices 推出了適用於智慧型手機的 Mirza 無線 XR 眼鏡,使用戶無需再糾結電線。這款眼鏡可在現實空間中顯示虛擬 AR 內容,例如 Pokemon Go 或在大型虛擬顯示器上顯示手機內容

See all articles