Maison > php教程 > PHP开发 > Notes d'étude CodeIgniter Item5 - AR dans CI

Notes d'étude CodeIgniter Item5 - AR dans CI

黄舟
Libérer: 2016-12-29 10:23:35
original
1400 Les gens l'ont consulté

AR (Active Record)

Lorsque AR est activé (CI3.0 est démarré par défaut et n'a aucun élément de configuration), vous pouvez utiliser la méthode get de

$this->db
Copier après la connexion


Obtenir l'ensemble de résultats d'une table

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


Vous pouvez simplement insérer un enregistrement via la méthode insert. Les paramètres sont le nom de la table et le tableau associatif
<🎜. >

[code]$data = array('name'=>'mary', 'password'=>md5('mary'));
$result = $this->db->insert('user', $data);
Copier après la connexion

Modifier l'enregistrement via la méthode de mise à jour. Le premier paramètre est l'indication, le deuxième paramètre est le contenu modifié, représenté par un tableau associatif, et le troisième paramètre est la condition de requête.


[code]$data = array ('email'=>'mary@gmail.com', 'password'=>md5('123456'));
$this->db->update('user', $data, array('name'=>'mary'));
Copier après la connexion

Supprimer un enregistrement via la méthode de suppression. Le premier paramètre est le nom de la table et le deuxième paramètre est la condition de requête

<🎜. >

[code]$this->db->delete('user', array('name'=>'mary'));
Copier après la connexion


Opération continue, pour des instructions SQL plus complexes, vous pouvez utiliser l'opération cohérente fournie par AR pour interroger



[code]$result = $this->db->select('id, name')
            ->from('user')
            ->where('id >=', 1)
            ->limit(3,1)
            ->order_by('id desc ')
            ->get();
Copier après la connexion
Remarque : L'ordre de limite des paramètres est le même qu'en SQL. L'ordre est inversé. Le premier paramètre indique le nombre d'éléments affichés et le deuxième paramètre indique le nombre d'éléments ignorés


Comment. pour écrire l'instruction Where dans différentes conditions de requête



La méthode last_query() peut être utilisée pour obtenir l'instruction SQL assemblée par AR via des opérations cohérentes
[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
Copier après la connexion



AR ne peut exécuter que des requêtes relativement simples, s'il s'agit d'une requête complexe, il est recommandé d'utiliser $this->db->query($sql, $data)
[code]$this->db->last_query();
Copier après la connexion
pour interroger


select data

Les fonctions suivantes vous aident à créer des instructions SQL SELECT.

Remarque : Si vous utilisez PHP5, vous pouvez utiliser la syntaxe de chaîne dans des situations complexes. Des descriptions détaillées sont fournies au bas de cette page.



Exécutez l'instruction de requête select et renvoyez l'ensemble de résultats. Toutes les données d'un tableau peuvent être obtenues.
[code]$this->db->get();
Copier après la connexion



Les deuxième et troisième paramètres permettent de définir le nombre d'enregistrements par page d'un ensemble de résultats (limite) et le décalage de l'ensemble de résultats
[code]$query = $this->db->get('mytable');
// Produces: SELECT * FROM mytable
Copier après la connexion



[code]$query = $this->db->get('mytable', 10, 20);
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
Copier après la connexion
Remarque : Le deuxième paramètre est le nombre d'enregistrements par page, et le troisième paramètre est le décalage


Vous remarquerez que la fonction ci-dessus est constituée d'une variable $ query
Execution, cette $query
peut être utilisée pour afficher l'ensemble de résultats.


[code]$query = $this->db->get('mytable');
foreach ($query->result() as $row)
{
    echo $row->title;
}
[code]$this->db->get_where();
Copier après la connexion
est la même que la fonction ci-dessus, sauf qu'elle vous permet d'ajouter une clause Where au deuxième paramètre de la fonction sans utiliser le db->where() function :




Remarque : get_where() a été écrit comme getwhere() dans les versions précédentes. Il s'agit d'une utilisation obsolète et getwhere() a été supprimé du code.
[code]$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
Copier après la connexion



permet d'écrire la partie SELECT dans la requête SQL :
[code]$this->db->select();
Copier après la connexion



Remarque : si vous souhaitez interroger tout les éléments du tableau OK, vous n'avez pas besoin d'écrire cette fonction. En cas d'omission, CodeIgniter pensera que vous souhaitez interroger toutes les lignes (SELECT *).
[code]$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// Produces: SELECT title, content, date FROM mytable
Copier après la connexion



$this->db->select()
Copier après la connexion
Méthode de tableau associatif :
[code]$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 
$query = $this->db->get('mytable');
Copier après la connexion



Cette fonction est quasiment identique à celle ci-dessus, la seule différence is Plusieurs instances sont connectées en utilisant OR :
[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();
Copier après la connexion



[code]$this->db->like('title', 'match');
$this->db->or_like('body', $match); 
// WHERE title LIKE '%match%' OR body LIKE '%match%'
Copier après la connexion
Remarque : or_like() était autrefois appelé orlike(), ce dernier est obsolète et est désormais orlike() a été supprimé du code.




Cette fonction est presque identique à like(), la seule différence est qu'elle génère l'instruction NOT LIKE :
[code]$this->db->not_like();
Copier après la connexion



Cette fonction est presque identique à not_like(). La seule différence est que plusieurs instances sont connectées avec OR :
[code]$this->db->not_like('title', 'match');
// WHERE title NOT LIKE '%match%
$this->db->or_not_like();
Copier après la connexion



[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();
Copier après la connexion
vous permet d'écrire des instructions de requête GROUP BY. part :




Vous pouvez également transmettre plusieurs valeurs sous forme de tableau :
[code]$this->db->group_by("title"); 
// 生成: GROUP BY title
Copier après la connexion



Explication : group_by () utilisé être appelé groupby(), qui est obsolète et groupby() a été supprimé du code.
[code]$this->db->group_by(array("title", "date")); 
// 生成: GROUP BY title, date
Copier après la connexion



Ajouter le mot-clé "DISTINCT" à la requête :
[code]$this->db->distinct();
Copier après la connexion



[code]$this->db->distinct();
$this->db->get('table');
// 生成: SELECT DISTINCT * FROM table
$this->db->having();
Copier après la connexion
permet d'ajouter "DISTINCT" à votre requête Écrivez la section HAVING. Il existe deux formes de syntaxe, un ou deux paramètres sont acceptables :




[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
Copier après la connexion
Si vous utilisez une base de données protégée par CodeIgniter, afin d'éviter que du contenu ne s'échappe Définition, vous pouvez transmettre un troisième argument facultatif et le définir sur FALSE.




est presque identique à la fonction have(). La seule différence est que plusieurs clauses sont séparées par "OR".
[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();
Copier après la connexion



vous aide à mettre en place une clause ORDER BY. Le premier paramètre est le nom du champ sur lequel vous souhaitez trier. Le deuxième paramètre définit l'ordre des résultats. Les options disponibles incluent asc (ordre croissant) ou desc (ordre décroissant) ou random (aléatoire).
[code]$this->db->order_by();
Copier après la connexion



Vous pouvez également passer votre propre chaîne dans le premier paramètre :
[code]$this->db->order_by("title", "desc"); 
// 生成: ORDER BY title DESC
Copier après la connexion



Alternativement, plusieurs appels de cette fonction peuvent trier plusieurs champs.
[code]$this->db->order_by('title desc, name asc'); 
// 生成: ORDER BY title DESC, name ASC
Copier après la connexion



[code]$this->db->order_by("title", "desc");
$this->db->order_by("name", "asc"); 
// 生成: ORDER BY title DESC, name ASC
Copier après la connexion
Remarque : order_by() était autrefois appelé orderby(), ce qui est obsolète et orderby() a été supprimé du code.


Remarque : actuellement, les pilotes Oracle et MSSQL ne prennent pas en charge le tri aléatoire et seront définis par défaut sur « ASC » (ordre croissant).



Limiter le nombre de résultats renvoyés par la requête :
[code]$this->db->limit();
Copier après la connexion



Le deuxième paramètre définit le décalage du résultat.
[code]$this->db->limit(10);
// 生成: LIMIT 10
Copier après la connexion


[code]$this->db->limit(10, 20);
// 生成: LIMIT 20, 10 (仅限MySQL中。其它数据库有稍微不同的语法)
$this->db->count_all_results();
Copier après la connexion

允许你获得某个特定的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
Copier après la connexion

插入数据

[code]$this->db->insert();
Copier après la connexion


生成一条基于你所提供的数据的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')
Copier après la connexion

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

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

[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')
Copier après la connexion


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

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

[code]$this->db->set();
Copier après la connexion

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

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

[code]$this->db->set('name', $name); 
$this->db->insert('mytable'); 
// 生成: INSERT INTO mytable (name) VALUES ('{$name}')
Copier après la connexion

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

[code]$this->db->set('name', $name);
$this->db->set('title', $title);
$this->db->set('status', $status);
$this->db->insert('mytable');
Copier après la connexion


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')
Copier après la connexion

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

[code]$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->set($array);
$this->db->insert('mytable');
Copier après la connexion

或者一个对象也可以:

[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');
Copier après la connexion

更新数据

[code]$this->db->update();
Copier après la connexion

根据你提供的数据生成并执行一条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
Copier après la connexion

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

[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
Copier après la connexion

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

你会注意到

$this->db->where()
Copier après la connexion
[code]$this->db->update('mytable', $data, "id = 4");
Copier après la connexion

或者是一个数组:

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


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

删除数据

[code]$this->db->delete();
Copier après la connexion

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

[code]$this->db->delete('mytable', array('id' => $id)); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
Copier après la connexion

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

[code]$this->db->where('id', $id);
$this->db->delete('mytable'); 
// 生成:
// DELETE FROM mytable 
// WHERE id = $id
Copier après la connexion


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

[code]$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);
Copier après la connexion

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

[code]$this->db->empty_table();
Copier après la connexion

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

[code] $this->db->empty_table('mytable'); 
// 生成
// DELETE FROM mytable
$this->db->truncate();
Copier après la connexion


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

[code]$this->db->from('mytable'); 
$this->db->truncate(); 
// 或 
$this->db->truncate('mytable'); 
// 生成:
// TRUNCATE mytable
Copier après la connexion

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

链式方法

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

[code]$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
Copier après la connexion

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


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal