banner image

CodeIgniter User Guide Version 2.1.3


Codeigniter использует модифицированную версию паттерна Active Record. Этот паттерн позволяет получать, вставлять и обновлять информацию в вашей базе данных с минимальным объемом кода. В некоторых случаях достаточно пары строк кода для того, чтобы выполнить действие с БД. CodeIgniter не требует, чтобы у каждой таблицы БД был собственный файл с классом. Вместо этого он предоставляет более удобный интерфейс.


Кроме простоты, большим преимуществом использования Active Record является то, что он позволяет создавать приложения, независимые от базы данных, так как свой синтаксис запросов автоматически генерируется для каждого драйвера БД. Также он создает более безопасные запросы, автоматически экранируя значения скобками.


Примечание: Если вы хотите писать запросы руками, вы можете выключить этот класс в конфигурационном файле, что позволит библиотеке ядра и адаптеру использовать меньше ресурсов.


Выборка данных


Следующие функции позволяют вам строить SQL-запросы для выборки данных.


Примечание: Если вы используете PHP 5, вы можете использовать сцепление методов для получения более компактного синтаксиса. Спецление методов описано в конце страницы.


Запускает запрос на выборку и возвращает результат. Может использоваться как есть, для того, чтобы получить все записи из таблицы:


Второй и третий параметры позволят вам установить ограничение и смещение:


$query = $this->db->get('mytable', 10, 20);


Заметьте, что функция присваивается переменной $query , которая может использоваться для того, чтобы показывать результаты:


Пожалуйста посетите страницу функции результата для более подробной информации о генерации результатов.


$this->db->get_where();


Аналогично функции выше, позволяет вам добавить условие "where" во втором параметре, вместо использования функции db->where:


$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);


Пожалуйста прочтите ниже о функции where() для дополнительной информации.


Примечание: get_where() ранее было известно как getwhere(), которое сейчас удалено.


$this->db->select();


Позволяет вам написать часть запроса SELECT:


$this->db->select('title, content, date');


Примечание: Не стоит использовать эту функцию, если вы выбираете все поля (*) из таблицы. Когда она опущена, CodeIgniter подразумевает что вы желаете выбрать все SELECT *


$this->db->select() принимает второй опциональный параметр. Если вы установите его в FALSE, CodeIgniter не будет пытаться защищать обратными кавычками имена полей или таблицы. Это полезно, если вы хотите составить запрос для сравнения.


$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE);


$this->db->select_max();


Пишет фрагмент запроса "SELECT MAX(field)". Опционально вы можете указать второй параметр для переименования результирующего поля.


// Сделает: SELECT MAX(age) as age FROM members


// Сделает: SELECT MAX(age) as member_age FROM members


$this->db->select_min();


Запишет фрагмент запроса "SELECT MIN(field)". Также как и с select_max() , вы можете указать второй опциональный параметр для переименования результирующего поля.


// Сделает: SELECT MIN(age) as age FROM members


$this->db->select_avg();


Пишет фрагмент запроса "SELECT AVG(field)". Также как и с select_max() , вы можете указать второй опциональный параметр для переименования результирующего поля.


// Сделает: SELECT AVG(age) as age FROM members


$this->db->select_sum();


Пишет фрагмент запроса "SELECT SUM(field)". Также как и с select_max() , вы можете указать второй опциональный параметр для переименования результирующего поля.


// Сделает: SELECT SUM(age) as age FROM members


$this->db->from();


Позволяет вам указать фрагмент запроса FROM:


$this->db->select('title, content, date');


Примечание: Как известно ранее, фрагмент FROM вашего запроса может быть указан в функции $this->db->get() , поэтому вы можете выбирать предпочтительный метод на ваше усмотрение.


$this->db->join();


Позволяет вам писать фрагмент JOIN вашего запроса:


$this->db->join('comments', 'comments.id = blogs.id');


// SELECT * FROM blogs


// JOIN comments ON comments.id = blogs.id


Множественные вызовы функции сделают несколько объединений в одном запросе.


Если вы хотите указать тип объединения JOIN, используйте третий параметр функции. Возможные опции: left, right, outer, inner, left outer и right outer.


$this->db->join('comments', 'comments.id = blogs.id', 'left');


$this->db->where();


Эта функция позволяет установить условие WHERE одним из четырех методов:


Примечание: Все значения, переданные этой функции автоматически экранируются, для генерации более безопасных запросов.


Помните, что будет добавлен знак равенства.


Если вы используете множественные вызовы функции, они будут объединены с AND между условиями:


Вы можете включить оператор в первом параметре для того, чтобы контролировать сравнение:


$this->db->where('id

  • Метод ассоциативного массива: $array = array('name' => $name, 'title' => $title, 'status' => $status);


    Вы можете включить ваши собственные операторы, используя этот метод:


    $array = array('name !=' => $name, 'id $id, 'date >' => $date);


    Вы можете писать запросы вручную:


    $where = "name='Joe' AND status='boss' OR status='active'";


    $this->db->where() принимает третий опциональный параметр. Если вы установите его в FALSE, CodeIgniter не будет пытаться защищать имена полей и таблиц обратными кавычками.


    $this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);


    $this->db->or_where();


    Аналогично функции выше, за исключением того, что множественные вызовы будут объединены с OR:


    Примечание: or_where() ранее было известно как orwhere(), которое теперь удалено.


    $this->db->where_in();


    Генерирует SQL-запрос WHERE field IN ('item', 'item'), при необходимости объединяя с AND.


    $names = array('Frank', 'Todd', 'James');


    // Сделает: WHERE username IN ('Frank', 'Todd', 'James')


    $this->db->or_where_in();


    Сделает SQL-запрос WHERE field IN ('item', 'item'), при необходимости объединяя с OR.


    $names = array('Frank', 'Todd', 'James');


    // Сделает: OR username IN ('Frank', 'Todd', 'James')


    $this->db->where_not_in();


    Сделает SQL-запрос WHERE field NOT IN ('item', 'item'), объединяя фрагмент с другими условиями посредством AND.


    $names = array('Frank', 'Todd', 'James');


    // Сделает: WHERE username NOT IN ('Frank', 'Todd', 'James')


    $this->db->or_where_not_in();


    Сделает SQL-запрос WHERE field NOT IN ('item', 'item'), при необходимости объединяя с OR.


    $names = array('Frank', 'Todd', 'James');


    // Сделает: OR username NOT IN ('Frank', 'Todd', 'James')


    $this->db->like();


    Эта функция позволяет вам генерировать условие LIKE, полезное для поиска.


    Примечание: Все значения, переданные этой функции, будут автоматически экранированы.


    Если вы используете множественные вызовы, они будут объединены условием AND между ними:


    // Сделает: WHERE title LIKE '%match'


    // Сделает: WHERE title LIKE 'match%'


    // Сделает: WHERE title LIKE '%match%' Если вы не хотите использовать wildcard (%), вы можете передать значение 'none' в третьем параметре функции. $this->db->like('title', 'match', 'none');


    // Сделает: WHERE title LIKE 'match'


  • Использование ассоциативного массива: $array = array('title' => $match, 'page1' => $match, 'page2' => $match);


    $this->db->or_like();


    Эта функция идентичная функции выше, за исключением того, что множественные вызовы будут объединены с OR:


    Примечание: or_like() ранее было известно как orlike(), которое теперь удалено.


    $this->db->not_like();


    Эта функция идентична функции like(), за исключением того, что она делает условия NOT LIKE:


    $this->db->or_not_like();


    Эта функция идентична функции not_like(), за исключением того, что множественные вызовы объединяются с OR:


    $this->db->group_by();


    Позволяет вам записать фрагмент запроса GROUP BY:


    Вы также можете передать массив множественных значений:


    Примечание: group_by() ранее было известно как groupby(), которое теперь удалено.


    $this->db->distinct();


    Добавляет ключевое слово "DISTINCT" к запросу.


    $this->db->having();


    Позволяет вам написать фрамент запроса HAVING. Здесь есть 2 возможных синтаксиса, один или два аргумента:


    // Сделает: HAVING user_id = 45


    // Сделает: HAVING user_id = 45


    Вы также можете передать массив из множества значений:


    $this->db->having(array('title =' => 'My Title', 'id $id));


    Если вы используете базу данных, для которой CodeIgniter экранирует запросы, вы можете выключить экранирование передачей третьего опционального параметра, указав FALSE.


    // Сделает: HAVING `user_id` = 45 (в некоторых БД, таких как MySQL)


    $this->db->having('user_id', 45, FALSE);


    // Сделает: HAVING user_id = 45


    $this->db->or_having();


    Идентично having(), только объединяет множественные вызовы с "OR".


    $this->db->order_by();


    Позволяет вам указать условие ORDER BY. Первый параметр содержит имя столбца, по которому будет осуществляться сортировка. Второй параметр позволяет вам указывать сортировку результата. Доступные опции: asc , desc или random .


    Вы также можете передать вашу собственную строку в первом параметре:


    $this->db->order_by('title desc, name asc');


    Или использовать множественные вызовы функций, если вам нужна сортировка по нескольким полям.


    Примечание: order_by() ранее было известно как orderby(), которое теперь удалено.


    Примечание: случайная (random) сортировка не поддерживается драйверами Oracle и MSSQL. Они по умолчанию делают 'ASC'.


    $this->db->limit();


    Позволяет вам ограничить количество строк в выборке, возвращаемой запросом:


    Второй параметр позволяет указать смещение.


    $this->db->count_all_results();


    Позволяет вам определить количество строк в конкретном запросе Active Record. Учитываются такие ограничения как where(), or_where(), like(), or_like(), и так далее. Пример:


    echo $this->db->count_all_results(' my_table ');


    // Выведет целое число, например 25


    // Выведет целое число, например 17


    $this->db->count_all();


    Позволяет сосчитать все строки в таблице. Передайте имя таблицы в первом параметре. Пример:


    echo $this->db->count_all(' my_table ');


    Вставка данных


    $this->db->insert();


    Генерирует строку для вставки, основываясь на переданных данных, и запускает запрос. Вы также можете передать этой функции массив или объект. Вот пример использования массива:


    'title' => 'My title' ,


    Первый параметр содержит имя таблицы, второй — ассоциативный массив со значениями.


    Вот пример использования объекта:


    var $title = 'My Title';


    var $content = 'My Content';


    var $date = 'My Date';


    Первый параметр содержит имя таблицы, второй — объект.


    Примечание: Все значения автоматически экранируются, для генерации более безопасных запросов.


    $this->db->insert_batch();


    Генерирует строку для вставки, основываясь на переданных данных, и запускает запрос на выполнение. Вы также можете передать массив или объект в функцию. Вот пример использования массива:


    'title' => 'My title' ,


    'title' => 'Another title' ,


    'name' => 'Another Name' ,


    'date' => 'Another date'


    Первый параметр содержит имя таблицы, второй — ассоциативный массив со значениями.


    Примечание: Все значения автоматически экранируются, для генерации более безопасных запросов.


    Эта функция позволяет вам устанавливать значения для последующей вставки или обновления.


    Вы можете передавать значения массивом непосредственно в функцию обновления:


    Если вы используете множественные вызовы функции, они будут объединяться и использоваться для последующей вставки или обновления:


    set() также принимает третий опциональный параметр ($escape), который позволяет предотвратить экранирование, если установить его в FALSE. Для демонстрации различий, вот пример set(), с экранирующим параметром и без него.


    // сделает INSERT INTO mytable (field) VALUES (field+1)


    // сделает INSERT INTO mytable (field) VALUES ('field+1')


    Вы также можете передать ассоциативный массив этой функции:


    $array = array('name' => $name, 'title' => $title, 'status' => $status);


    var $title = 'My Title';


    var $content = 'My Content';


    var $date = 'My Date';


    Обновление данных


    $this->db->update();


    Генерирует строки обновления и запускает выполнение запроса, основываясь на переданных данных. Вы можете передать массив или объект этой функции. Вот пример использования массива:


    var $title = 'My Title';


    var $content = 'My Content';


    var $date = 'My Date';


    Примечание: Все значения автоматически экранируются для генерации более безопасных запросов.


    Обратите внимание на использование функции $this->db->where() , позволяющей указывать условие WHERE. Вы также можете опционально передать информацию непосредственно в функцию обновления:


    $this->db->update('mytable', $data, "id = 4");


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


    Также вы можете использовать функцию $this->db->set() , определяющую данные, которые следует обновить.


    $this->db->update_batch();


    Генерирует строку обновления, основываясь на переданных данных, и запускает запрос. Вы можете передать массив или объект этой функции. Вот пример использования массива:


    'title' => 'My title' ,


    'name' => 'My Name 2' ,


    'date' => 'My date 2'


    'title' => 'Another title' ,


    'name' => 'Another Name 2' ,


    'date' => 'Another date 2'


    // UPDATE `mytable` SET `name` = CASE


    // WHEN `title` = 'My title' THEN 'My Name 2'


    // WHEN `title` = 'Another title' THEN 'Another Name 2'


    // WHEN `title` = 'My title' THEN 'My date 2'


    // WHEN `title` = 'Another title' THEN 'Another date 2'


    // WHERE `title` IN ('My title','Another title')


    Первый параметр содержит имя таблицы, второй — ассоциативный массив значений. Третий параметр содержит ключ.


    Примечание: Все значения автоматически экранируются, для генерации более безопасных запросов.


    Удаление данных


    $this->db->delete();


    Генерирует удаляющую строку SQL и запускает запрос.


    $this->db->delete('mytable', array('id' => $id));


    // DELETE FROM mytable


    Первый параметр это имя таблицы, второй — условие WHERE. Вы можете использовать функции where() или or_where() вместо того, чтобы передавать данные вторым параметром функции:


    // DELETE FROM mytable


    Можно передать массив с именами таблиц в delete(), если вы хотите удалить данные из более, чем одной таблицы.


    $tables = array('table1', 'table2', 'table3');


    Если вы хотите удалить все данные в таблице, вы можете использовать функции truncate() или empty_table() .


    $this->db->empty_table();


    Генерирует строку SQL и запускает запрос на выполнение. $this->db->empty_table('mytable');


    // DELETE FROM mytable


    $this->db->truncate();


    Генерирует урезающий запрос SQL и запускает его на выполнение.


    Примечание: Если команда TRUNCATE не доступна, truncate() выполнит запрос "DELETE FROM table".


    Сцепление методов


    Сцепление методов позволяет вам упростить синтаксис, сцепляя несколько функций. Рассмотрим этот пример:


    $this->db -> select ('title') -> from ('mytable') -> where ('id', $id) -> limit (10, 20);


    Примечание: Сцепление методов работает только с PHP 5.


    Кеширование Active Record


    В отличие от «настоящего» кеширования, Active Record позволяет вам сохранить (или «кешировать») различные части ваших запросов для повторного использования в более поздних точках выполнения скрипта. Обычно, когда вызов Active Record выполнен, вся сохраненная информация сбрасывается перед следующим вызовом. С кешированием вы можете предотвратить этот сброс, и легко использовать информацию повторно.


    Кеширующие вызовы кумулятивны. Вы можете сделать два кешированных вызова select(), и затем два некешированных вызова select(), что даст результат в виде четырех вызовов select();. Доступны три функции для кеширования:


    $this->db->start_cache()


    Эта функция должна быть вызвана перед началом кеширования. Все вызовы Active Record корректного типа (смотрите ниже про поддерживаемые типы вызовов) сохраняются для дальнейшего использования.


    $this->db->stop_cache()


    Эта функция вызывается для остановки кеширования.


    $this->db->flush_cache()


    Эта функция удаляет все элементы из кеша Active Record.


    Вот пример использования:


    Примечание: Следующие вызовы могут быть кешированы: select, from, join, where, like, group_by, having, order_by и set.

  • Reviewed by andrey on ноября 15, 2017 Rating: 5

    Комментариев нет:

    Технологии Blogger.