Heim > php教程 > PHP开发 > Hauptteil

CodeIgniter-Studiennotizen Punkt 5 – AR in CI

黄舟
Freigeben: 2016-12-29 10:23:35
Original
1378 Leute haben es durchsucht

AR (Active Record)

Wenn AR aktiviert ist (CI3.0 wird standardmäßig gestartet und verfügt über keine Konfigurationselemente), können Sie die Get-Methode von

$this->db
Nach dem Login kopieren

< verwenden 🎜> Erhalten Sie die Ergebnismenge einer Tabelle

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

Sie können einen Datensatz einfach über die Einfügemethode einfügen. Die Parameter sind der Tabellenname und das assoziative Array


[code]$data = array('name'=>'mary', 'password'=>md5('mary'));
$result = $this->db->insert('user', $data);
Nach dem Login kopieren

Ändern Sie den Datensatz über die Aktualisierungsmethode. Der erste Parameter ist die Angabe, der zweite Parameter ist der geänderte Inhalt, dargestellt durch ein assoziatives Array, und der dritte Parameter ist die Abfragebedingung


[code]$data = array ('email'=>'mary@gmail.com', 'password'=>md5('123456'));
$this->db->update('user', $data, array('name'=>'mary'));
Nach dem Login kopieren

Einen Datensatz über die Löschmethode löschen. Der erste Parameter ist der Tabellenname und der zweite Parameter ist die Abfragebedingung


[code]$this->db->delete('user', array('name'=>'mary'));
Nach dem Login kopieren



Kontinuierlicher Betrieb. Für komplexere SQL-Anweisungen können Sie den von AR bereitgestellten kohärenten Betrieb verwenden, um


<🎜 abzufragen >
[code]$result = $this->db->select('id, name')
            ->from('user')
            ->where('id >=', 1)
            ->limit(3,1)
            ->order_by('id desc ')
            ->get();
Nach dem Login kopieren
Hinweis: Die Parameterreihenfolge ist dieselbe wie in SQL. Die Reihenfolge ist umgekehrt. Der erste Parameter gibt die Anzahl der angezeigten Elemente an und der zweite Parameter gibt die Anzahl der übersprungenen Elemente an um die Where-Anweisung unter verschiedenen Abfragebedingungen zu schreiben





Die Methode last_query() kann verwendet werden, um die von AR zusammengestellte SQL-Anweisung durch kohärente Operationen zu erhalten

[code]where(&#39;name&#39;, &#39;mary&#39;)或where(&#39;name =&#39;, &#39;mary&#39;):表示查询条件是name字段值是mary
where(array(&#39;name&#39;=>&#39;mary&#39;, &#39;id >&#39;=>&#39;1&#39;));:表示查询条件有两个,name字段值是mary并且id字段值是1
Nach dem Login kopieren


AR kann nur relativ einfache Abfragen ausführen. Wenn es sich um eine komplexe Abfrage handelt, wird empfohlen, für die Abfrage $this->db->query($sql, $data)
zu verwenden

[code]$this->db->last_query();
Nach dem Login kopieren
Daten auswählen


Die folgenden Funktionen helfen Ihnen beim Erstellen von SQL-SELECT-Anweisungen.

Hinweis: Wenn Sie PHP5 verwenden, können Sie in komplexen Situationen die Kettensyntax verwenden. Detaillierte Beschreibungen finden Sie unten auf dieser Seite.




Führen Sie die Select-Query-Anweisung aus und geben Sie die Ergebnismenge zurück. Alle Daten einer Tabelle können abgerufen werden.

[code]$this->db->get();
Nach dem Login kopieren


Mit dem zweiten und dritten Parameter können Sie die Anzahl der Datensätze pro Seite eines Ergebnissatzes (Limit) und den Offset des Ergebnissatzes festlegen

[code]$query = $this->db->get('mytable');
// Produces: SELECT * FROM mytable
Nach dem Login kopieren



Hinweis: Der zweite Parameter ist die Anzahl der Datensätze pro Seite und der dritte Parameter ist der Offset

[code]$query = $this->db->get('mytable', 10, 20);
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
Nach dem Login kopieren
Sie werden feststellen, dass die obige Funktion aus einer Variablen $ besteht query

Ausführung, diese $query
kann zur Anzeige der Ergebnismenge verwendet werden.




ist dasselbe wie die obige Funktion, außer dass Sie damit eine where-Klausel zum zweiten Parameter der Funktion hinzufügen können, ohne db->where() zu verwenden. Funktion:

[code]$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
    echo $row->title;
}
[code]$this->db->get_where();
Nach dem Login kopieren



Hinweis: get_where() wurde in früheren Versionen als getwhere() geschrieben. Dies ist eine veraltete Verwendung und getwhere() wurde aus dem Code entfernt.

[code]$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
Nach dem Login kopieren


ermöglicht Ihnen, den SELECT-Teil in die SQL-Abfrage zu schreiben:

[code]$this->db->select();
Nach dem Login kopieren


Hinweis: Wenn Sie alles abfragen möchten Die Elemente in der Tabelle sind in Ordnung, Sie müssen diese Funktion nicht schreiben. Wenn es weggelassen wird, geht CodeIgniter davon aus, dass Sie alle Zeilen abfragen möchten (SELECT *).

[code]$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// Produces: SELECT title, content, date FROM mytable
Nach dem Login kopieren



Assoziative Array-Methode:

$this->db->select()
Nach dem Login kopieren
[code]$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 
$query = $this->db->get('mytable');
Nach dem Login kopieren


Diese Funktion ist fast identisch mit der oben genannten, der einzige Unterschied is Mehrere Instanzen werden mit OR verbunden:

[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();
Nach dem Login kopieren



Hinweis: or_like() hieß früher orlike(), letzteres ist veraltet und heißt jetzt orlike() wurde aus dem Code entfernt.

[code]$this->db->like('title', 'match');
$this->db->or_like('body', $match); 
// WHERE title LIKE '%match%' OR body LIKE '%match%'
Nach dem Login kopieren



Diese Funktion ist fast identisch mit like(), der einzige Unterschied besteht darin, dass sie die NOT LIKE-Anweisung generiert:

[code]$this->db->not_like();
Nach dem Login kopieren


Diese Funktion ist fast identisch mit not_like(). Der einzige Unterschied besteht darin, dass mehrere Instanzen mit OR verbunden sind:

[code]$this->db->not_like('title', 'match');
// WHERE title NOT LIKE '%match%
$this->db->or_not_like();
Nach dem Login kopieren



ermöglicht das Schreiben von Abfrageanweisungen GROUP BY Teil:

[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();
Nach dem Login kopieren



Sie können auch mehrere Werte als Array übergeben:

[code]$this->db->group_by("title"); 
// 生成: GROUP BY title
Nach dem Login kopieren


Erklärung: group_by() verwendet soll „groupby()“ heißen, was veraltet ist und „groupby()“ aus dem Code entfernt wurde.

[code]$this->db->group_by(array("title", "date")); 
// 生成: GROUP BY title, date
Nach dem Login kopieren


Fügen Sie das Schlüsselwort „DISTINCT“ zur Abfrage hinzu:

[code]$this->db->distinct();
Nach dem Login kopieren



ermöglicht das Hinzufügen von „DISTINCT“ zu Ihrer Anfrage Schreiben Sie den Abschnitt HAVING. Es gibt zwei Syntaxformen, ein oder zwei Parameter sind akzeptabel:

[code]$this->db->distinct();
$this->db->get('table');
// 生成: SELECT DISTINCT * FROM table
$this->db->having();
Nach dem Login kopieren




Wenn Sie eine Datenbank verwenden, die durch CodeIgniter Escape-geschützt ist, um das Escapen von Inhalten zu vermeiden Definition: Sie können ein optionales drittes Argument übergeben und es auf FALSE setzen.

[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
Nach dem Login kopieren



ist fast identisch mit der Funktion getting(). Der einzige Unterschied besteht darin, dass mehrere Klauseln durch „OR“ getrennt werden.

[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();
Nach dem Login kopieren


hilft Ihnen beim Einrichten einer ORDER BY-Klausel. Der erste Parameter ist der Name des Feldes, nach dem Sie sortieren möchten. Der zweite Parameter legt die Reihenfolge der Ergebnisse fest. Zu den verfügbaren Optionen gehören „asc“ (aufsteigende Reihenfolge) oder „desc“ (absteigende Reihenfolge) oder „random“ (zufällig).

[code]$this->db->order_by();
Nach dem Login kopieren


Sie können auch Ihre eigene Zeichenfolge im ersten Parameter übergeben:

[code]$this->db->order_by("title", "desc"); 
// 生成: ORDER BY title DESC
Nach dem Login kopieren


Oder Sie können diese Funktion mehrmals aufrufen Sortieren Sie mehrere Felder.

[code]$this->db->order_by('title desc, name asc'); 
// 生成: ORDER BY title DESC, name ASC
Nach dem Login kopieren



Hinweis: order_by() hieß früher orderby(), was veraltet ist und orderby() aus dem Code entfernt wurde.

[code]$this->db->order_by("title", "desc");
$this->db->order_by("name", "asc"); 
// 生成: ORDER BY title DESC, name ASC
Nach dem Login kopieren
Hinweis: Derzeit unterstützen Oracle- und MSSQL-Treiber keine zufällige Sortierung und werden standardmäßig auf „ASC“ (aufsteigende Reihenfolge) eingestellt.





Begrenzen Sie die Anzahl der von der Abfrage zurückgegebenen Ergebnisse:

[code]$this->db->limit();
Nach dem Login kopieren


Der zweite Parameter legt den Ergebnis-Offset fest.

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

允许你获得某个特定的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
Nach dem Login kopieren

插入数据

[code]$this->db->insert();
Nach dem Login kopieren


生成一条基于你所提供的数据的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')
Nach dem Login kopieren

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

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

[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')
Nach dem Login kopieren


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

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

[code]$this->db->set();
Nach dem Login kopieren

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

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

[code]$this->db->set('name', $name); 
$this->db->insert('mytable'); 
// 生成: INSERT INTO mytable (name) VALUES ('{$name}')
Nach dem Login kopieren

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

[code]$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');
Nach dem Login kopieren


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')
Nach dem Login kopieren

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

[code]$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->set($array);
$this->db->insert('mytable');
Nach dem Login kopieren

或者一个对象也可以:

[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');
Nach dem Login kopieren

更新数据

[code]$this->db->update();
Nach dem Login kopieren

根据你提供的数据生成并执行一条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
Nach dem Login kopieren

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

[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
Nach dem Login kopieren

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

你会注意到

$this->db->where()
Nach dem Login kopieren
[code]$this->db->update('mytable', $data, "id = 4");
Nach dem Login kopieren

或者是一个数组:

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


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

删除数据

[code]$this->db->delete();
Nach dem Login kopieren

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

[code]$this->db->delete('mytable', array('id' => $id)); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
Nach dem Login kopieren

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

[code]$this->db->where('id', $id);
$this->db->delete('mytable'); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
Nach dem Login kopieren


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

[code]$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);
Nach dem Login kopieren

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

[code]$this->db->empty_table();
Nach dem Login kopieren

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

[code] $this->db->empty_table('mytable'); 
// 生成
// DELETE FROM mytable
$this->db->truncate();
Nach dem Login kopieren


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

[code]$this->db->from('mytable'); 
$this->db->truncate(); 
// 或 
$this->db->truncate('mytable'); 
// 生成:
// TRUNCATE mytable
Nach dem Login kopieren

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

链式方法

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

[code]$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
Nach dem Login kopieren

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


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage