Heim  >  Artikel  >  php教程  >  CodeIgniter-Studiennotizen Punkt 5 – AR in CI

CodeIgniter-Studiennotizen Punkt 5 – AR in CI

黄舟
黄舟Original
2016-12-29 10:23:351373Durchsuche

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

Erhalten Sie die Ergebnismenge einer Tabelle

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

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);

Ä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'));

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'));



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


[code]$result = $this->db->select('id, name')
            ->from('user')
            ->where('id >=', 1)
            ->limit(3,1)
            ->order_by('id desc ')
            ->get();
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('name', 'mary')或where('name =', 'mary'):表示查询条件是name字段值是mary
where(array('name'=>'mary', 'id >'=>'1'));:表示查询条件有两个,name字段值是mary并且id字段值是1


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();
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();


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



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)
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();



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);


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

[code]$this->db->select();


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



Assoziative Array-Methode:

$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');


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();



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%'



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

[code]$this->db->not_like();


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();



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();



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

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


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


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

[code]$this->db->distinct();



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();




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



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();


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();


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

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


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



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
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();


Der zweite Parameter legt den Ergebnis-Offset fest.

[code]$this->db->limit(10);
// 生成: LIMIT 10
[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)!


Stellungnahme:
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