Класс Query Builder
CodeIgniter предоставляет доступ к классу Query Builder. Этот шаблон позволяет извлекать, вставлять и обновлять информацию в вашей базе данных с минимальным количеством кода. В некоторых случаях для выполнения действия с базой данных достаточно одной или двух строк кода. CodeIgniter не требует, чтобы каждая таблица базы данных имела свой собственный класс. Вместо этого он предоставляет более упрощенный интерфейс.
Помимо простоты, основным преимуществом использования функций Query Builder является то, что он позволяет создавать независимые от базы данных приложения, так как синтаксис запроса генерируется каждым адаптером базы данных. Он также позволяет создавать более безопасные запросы, так как значения автоматически экранируются системой.
- Загрузка Query Builder
- Выбор данных
- Поиск конкретных данных
- Поиск похожих данных
- Сортировка результатов
- Ограничение или подсчёт результатов
- Группировка запросов
- Вставка данных
- Обновление данных
- Удаление данных
- Цепочки методов
- Сброс Query Builder
- Справочник по классу
Загрузка Query Builder
Query Builder загружается с помощью метода table() на подключении к базе данных. Это задаёт часть запроса FROM и возвращает новый экземпляр класса Query Builder:
$db = \Config\Database::connect();
$builder = $db->table('users');
Query Builder загружается в память только при явном запросе, поэтому ресурсы по умолчанию не используются.
Выбор данных
Следующие функции позволяют создавать SQL-запросы SELECT.
$builder->get()
Выполняет запрос выбора и возвращает результат. Может использоваться самостоятельно для извлечения всех записей из таблицы:
$builder = $db->table('mytable');
$query = $builder->get(); // Produces: SELECT * FROM mytable
Первый и второй параметры позволяют установить условия LIMIT и OFFSET:
$query = $builder->get(10, 20); // Executes: SELECT * FROM mytable LIMIT 20, 10 // (in MySQL. Other databases have slightly different syntax)
Вы заметите, что вышеупомянутая функция присвоена переменной $query, которая может быть использована для отображения результатов:
$query = $builder->get();
foreach ($query->getResult() as $row) {
echo $row->title;
}
Пожалуйста, посетите страницу функций результатов для получения полной информации о генерации результатов.
$builder->getCompiledSelect()
Компилирует запрос выбора так же, как $builder->get() , но не выполняет запрос. Этот метод просто возвращает SQL-запрос в виде строки.
Пример:
$sql = $builder->getCompiledSelect(); echo $sql; // Prints string: SELECT * FROM mytable
Первый параметр позволяет установить, будет ли сброшен запрос Query Builder (по умолчанию он сбрасывается, как и при использовании $builder->get()):
echo $builder->limit(10,20)->getCompiledSelect(false);
// Prints string: SELECT * FROM mytable LIMIT 20, 10
// (in MySQL. Other databases have slightly different syntax)
echo $builder->select('title, content, date')->getCompiledSelect();
// Prints string: SELECT title, content, date FROM mytable LIMIT 20, 10
Главное, что нужно заметить в приведенном выше примере, заключается в том, что второй запрос не использовал $builder->from() и не передавал имя таблицы в первый параметр. Причина такого результата заключается в том, что запрос не был выполнен с помощью $builder->get() , что сбрасывает значения, или сброшен непосредственно с помощью $builder->resetQuery() .
$builder->getWhere()
Идентично функции get() , за исключением того, что она позволяет добавить условие «where» в первый параметр вместо использования функции db->where():
$query = $builder->getWhere(['id' => $id], $limit, $offset);
Пожалуйста, ознакомьтесь с функцией where ниже для получения дополнительной информации.
$builder->select()
Позволяет записать часть SELECT вашего запроса:
$builder->select('title, content, date');
$query = $builder->get();
// Executes: SELECT title, content, date FROM mytable
Примечание
Если вы выбираете все (*) из таблицы, вам не нужно использовать эту функцию. При её отсутствии CodeIgniter предполагает, что вы хотите выбрать все поля и автоматически добавляет SELECT \*.
$builder->select() принимает необязательный второй параметр. Если вы установите его в false, CodeIgniter не будет пытаться защитить ваши имена полей или таблиц. Это полезно, если вам нужен составной запрос выбора, где автоматическое экранирование полей может нарушить его.
$builder->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4) AS amount_paid', false);
$query = $builder->get();
$builder->selectMax()
Записывает часть SELECT MAX(field) для вашего запроса. Вы можете необязательно включить второй параметр для переименования результирующего поля.
$builder->selectMax('age');
$query = $builder->get();
// Produces: SELECT MAX(age) as age FROM mytable
$builder->selectMax('age', 'member_age');
$query = $builder->get();
// Produces: SELECT MAX(age) as member_age FROM mytable
$builder->selectMin()
Записывает часть «SELECT MIN(field)» для вашего запроса. Как и selectMax(), вы можете необязательно включить второй параметр для переименования результирующего поля.
$builder->selectMin('age');
$query = $builder->get();
// Produces: SELECT MIN(age) as age FROM mytable
$builder->selectAvg()
Записывает часть «SELECT AVG(field)» для вашего запроса. Как и selectMax(), вы можете необязательно включить второй параметр для переименования результирующего поля.
$builder->selectAvg('age');
$query = $builder->get();
// Produces: SELECT AVG(age) as age FROM mytable
$builder->selectSum()
Записывает часть «SELECT SUM(field)» для вашего запроса. Как и selectMax(), вы можете необязательно включить второй параметр для переименования результирующего поля.
$builder->selectSum('age');
$query = $builder->get();
// Produces: SELECT SUM(age) as age FROM mytable
$builder->selectCount()
Записывает часть "SELECT COUNT(field)" для вашего запроса. Как и selectMax(), вы можете необязательно включить второй параметр для переименования результирующего поля.
Примечание
Этот метод особенно полезен при использовании с groupBy(). Для подсчета результатов обычно используется countAll() или countAllResults().
$builder->selectCount('age');
$query = $builder->get();
// Produces: SELECT COUNT(age) as age FROM mytable
$builder->from()
Позволяет записать часть FROM вашего запроса:
$builder = $db->table('users');
$builder->select('title, content, date');
$builder->from('mytable');
$query = $builder->get();
// Produces: SELECT title, content, date FROM users, mytable
Примечание
Как показано ранее, часть FROM вашего запроса указывается в функции $db->table(). Дополнительные вызовы к from() будут добавлять больше таблиц в часть FROM вашего запроса.
$builder->join()
Позволяет записать часть JOIN вашего запроса:
$builder = $db->table('blogs');
$builder->select('*');
$builder->join('comments', 'comments.id = blogs.id');
$query = $builder->get();
// Produces:
// SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
Можно сделать несколько вызовов функции, если вам нужны несколько объединений в одном запросе.
Если вам нужен конкретный тип JOIN, вы можете указать его через третий параметр функции. Варианты: left, right, outer, inner, left outer и right outer.
$builder->join('comments', 'comments.id = blogs.id', 'left');
// Produces: LEFT JOIN comments ON comments.id = blogs.id
Поиск конкретных данных
$builder->where()
Эта функция позволяет установить условия WHERE с использованием одного из четырёх методов:
Примечание
Все значения, передаваемые в эту функцию, автоматически экранируются, что обеспечивает более безопасные запросы, за исключением случаев использования пользовательской строки.
Примечание
$builder->where() принимает необязательный третий параметр. Если вы установите его в false, CodeIgniter не будет пытаться защищать ваши имена полей или таблиц.
-
Простой метод ключ/значение:
$builder->where('name', $name); // Produces: WHERE name = 'Joe'Обратите внимание, что знак равенства добавляется автоматически.
Если вы используете несколько вызовов функций, они будут объединены с AND между ними:
$builder->where('name', $name); $builder->where('title', $title); $builder->where('status', $status); // WHERE name = 'Joe' AND title = 'boss' AND status = 'active' -
Метод пользовательского ключа/значения:
Вы можете включить оператор в первый параметр, чтобы управлять сравнением:
$builder->where('name !=', $name); $builder->where('id <', $id); // Produces: WHERE name != 'Joe' AND id < 45 -
Метод ассоциативного массива:
$array = ['name' => $name, 'title' => $title, 'status' => $status]; $builder->where($array); // Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
Вы также можете включить собственные операторы с помощью этого метода:
$array = ['name !=' => $name, 'id <' => $id, 'date >' => $date]; $builder->where($array);
-
Пользовательская строка:
Вы можете вручную записать свои собственные условия:
$where = "name='Joe' AND status='boss' OR status='active'"; $builder->where($where);
Если вы используете данные, предоставленные пользователем, в строке, вы ОБЯЗАТЕЛЬНО должны вручную экранировать данные. Отсутствие экранирования может привести к SQL-инъекциям.
$name = $builder->db->escape('Joe'); $where = "name={$name} AND status='boss' OR status='active'"; $builder->where($where); -
Подзапросы:
Вы можете использовать анонимную функцию для создания подзапроса:
$builder->where('advance_amount <', function (BaseBuilder $builder) { return $builder->select('MAX(advance_amount)', false)->from('orders')->where('id >', 2); }); // Produces: WHERE "advance_amount" < (SELECT MAX(advance_amount) FROM "orders" WHERE "id" > 2)
$builder->orWhere()
Эта функция идентична вышеупомянутой, за исключением того, что несколько экземпляров соединяются с помощью OR:
$builder->where('name !=', $name);
$builder->orWhere('id >', $id);
// Produces: WHERE name != 'Joe' OR id > 50
$builder->whereIn()
Генерирует SQL-запрос WHERE field IN (‘item’, ‘item’), объединённый с AND при необходимости:
$names = ['Frank', 'Todd', 'James'];
$builder->whereIn('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')
Вы можете использовать подзапросы вместо массива значений:
$builder->whereIn('id', function (BaseBuilder $builder) {
return $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: WHERE "id" IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)
$builder->orWhereIn()
Генерирует SQL-запрос WHERE field IN ('item', 'item'), объединённый с OR при необходимости:
$names = ['Frank', 'Todd', 'James'];
$builder->orWhereIn('username', $names);
// Produces: OR username IN ('Frank', 'Todd', 'James')
Вы можете использовать подзапросы вместо массива значений:
$builder->orWhereIn('id', function (BaseBuilder $builder) {
return $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: OR "id" IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)
$builder->whereNotIn()
Генерирует SQL-запрос WHERE field NOT IN (‘item’, ‘item’), объединённый с AND при необходимости:
$names = ['Frank', 'Todd', 'James'];
$builder->whereNotIn('username', $names);
// Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')
Вы можете использовать подзапросы вместо массива значений:
$builder->whereNotIn('id', function (BaseBuilder $builder) {
return $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: WHERE "id" NOT IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)
$builder->orWhereNotIn()
Генерирует SQL-запрос WHERE field NOT IN ('item', 'item'), объединённый с OR при необходимости:
$names = ['Frank', 'Todd', 'James'];
$builder->orWhereNotIn('username', $names);
// Produces: OR username NOT IN ('Frank', 'Todd', 'James')
Вы можете использовать подзапросы вместо массива значений:
$builder->orWhereNotIn('id', function (BaseBuilder $builder) {
return $builder->select('job_id')->from('users_jobs')->where('user_id', 3);
});
// Produces: OR "id" NOT IN (SELECT "job_id" FROM "users_jobs" WHERE "user_id" = 3)
Поиск похожих данных
$builder->like()
Этот метод позволяет генерировать условия LIKE, полезные для поиска.
Примечание
Все значения, передаваемые в этот метод, автоматически экранируются.
Примечание
Все вариации метода like* могут быть принудительно переведены в регистронезависимый поиск путём передачи пятого параметра true в метод. В этом случае будут использоваться платформоспецифичные возможности, если они доступны; иначе значения будут принудительно переведены в нижний регистр, т.е., WHERE LOWER(column) LIKE '%search%'. Это может потребовать создания индексов для LOWER(column) вместо column для эффективной работы.
-
Простой метод ключ/значение:
$builder->like('title', 'match'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'Если вы используете несколько вызовов методов, они будут объединены с помощью AND:
$builder->like('title', 'match'); $builder->like('body', 'match'); // WHERE `title` LIKE '%match%' ESCAPE '!' AND `body` LIKE '%match%' ESCAPE '!'Если вы хотите контролировать расположение символа подстановки (%) , вы можете использовать необязательный третий аргумент. Ваши варианты: ‘before’, ‘after’ и ‘both’ (по умолчанию).
$builder->like('title', 'match', 'before'); // Produces: WHERE `title` LIKE '%match' ESCAPE '!' $builder->like('title', 'match', 'after'); // Produces: WHERE `title` LIKE 'match%' ESCAPE '!' $builder->like('title', 'match', 'both'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!' -
Метод ассоциативного массива:
$array = ['title' => $match, 'page1' => $match, 'page2' => $match]; $builder->like($array); // WHERE `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
$builder->orLike()
Этот метод идентичен предыдущему, за исключением того, что несколько экземпляров объединяются оператором ИЛИ:
$builder->like('title', 'match'); $builder->orLike('body', $match);
// WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
$builder->notLike()
Этот метод идентичен like(), за исключением того, что он генерирует операторы NOT LIKE:
$builder->notLike('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
$builder->orNotLike()
Этот метод идентичен notLike(), за исключением того, что несколько экземпляров объединяются оператором ИЛИ:
$builder->like('title', 'match');
$builder->orNotLike('body', 'match');
// WHERE `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
$builder->groupBy()
Позволяет вам написать часть GROUP BY вашего запроса:
$builder->groupBy("title");
// Produces: GROUP BY title
Вы также можете передать массив из нескольких значений:
$builder->groupBy(["title", "date"]); // Produces: GROUP BY title, date
$builder->distinct()
Добавляет ключевое слово «DISTINCT» в запрос
$builder->distinct(); $builder->get(); // Produces: SELECT DISTINCT * FROM mytable
$builder->having()
Позволяет вам написать часть HAVING вашего запроса. Есть 2 возможных синтаксиса: 1 аргумент или 2:
$builder->having('user_id = 45'); // Produces: HAVING user_id = 45
$builder->having('user_id', 45); // Produces: HAVING user_id = 45
Вы также можете передать массив из нескольких значений:
$builder->having(['title =' => 'My Title', 'id <' => $id]); // Produces: HAVING title = 'My Title', id < 45
Если вы используете базу данных, для которой CodeIgniter экранирует запросы, вы можете предотвратить экранирование содержимого, передав необязательный третий аргумент и установив его в значение false.
$builder->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL
$builder->having('user_id', 45, false); // Produces: HAVING user_id = 45
$builder->orHaving()
Идентично having(), только отделяет несколько подзапросов с помощью «ИЛИ».
$builder->havingIn()
Генерирует запрос SQL HAVING field IN ('item', 'item'), объединенный с AND, если это уместно.
$groups = [1, 2, 3];
$builder->havingIn('group_id', $groups);
// Produces: HAVING group_id IN (1, 2, 3)
Вы можете использовать подзапросы вместо массива значений.
$builder->havingIn('id', function (BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: HAVING "id" IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->orHavingIn()
Генерирует запрос SQL HAVING field IN ('item', 'item'), объединенный с OR, если это уместно.
$groups = [1, 2, 3];
$builder->orHavingIn('group_id', $groups);
// Produces: OR group_id IN (1, 2, 3)
Вы можете использовать подзапросы вместо массива значений.
$builder->orHavingIn('id', function (BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: OR "id" IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->havingNotIn()
Генерирует запрос SQL HAVING field NOT IN ('item', 'item'), объединенный с AND, если это уместно.
$groups = [1, 2, 3];
$builder->havingNotIn('group_id', $groups);
// Produces: HAVING group_id NOT IN (1, 2, 3)
Вы можете использовать подзапросы вместо массива значений.
$builder->havingNotIn('id', function (BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: HAVING "id" NOT IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->orHavingNotIn()
Генерирует запрос SQL HAVING field NOT IN ('item', 'item'), объединенный с OR, если это уместно.
$groups = [1, 2, 3];
$builder->havingNotIn('group_id', $groups);
// Produces: OR group_id NOT IN (1, 2, 3)
Вы можете использовать подзапросы вместо массива значений.
$builder->orHavingNotIn('id', function (BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// Produces: OR "id" NOT IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->havingLike()
Этот метод позволяет генерировать условия LIKE для части HAVING запроса, что полезно для поиска.
Примечание
Все значения, переданные этому методу, автоматически экранируются.
Примечание
Все havingLike* варианты метода могут быть принудительно выполнены с учетом регистра, передав пятый параметр true в метод. Это будет использовать платформенно-специфичные функции, где это возможно; в противном случае значения будут принудительно приведены к нижнему регистру, т. е. HAVING LOWER(column) LIKE '%search%'. Это может потребовать создания индексов для LOWER(column) вместо column, чтобы быть эффективным.
-
Простой метод key/value:
$builder->havingLike('title', 'match'); // Produces: HAVING `title` LIKE '%match%' ESCAPE '!'Если вы используете несколько вызовов метода, они будут объединены вместе с AND между ними:
$builder->havingLike('title', 'match'); $builder->havingLike('body', 'match'); // HAVING `title` LIKE '%match%' ESCAPE '!' AND `body` LIKE '%match% ESCAPE '!'Если вы хотите контролировать, где размещен символ подстановки (%) , вы можете использовать необязательный третий аргумент. Варианты — ‘before’, ‘after’ и ‘both’ (по умолчанию).
$builder->havingLike('title', 'match', 'before'); // Produces: HAVING `title` LIKE '%match' ESCAPE '!' $builder->havingLike('title', 'match', 'after'); // Produces: HAVING `title` LIKE 'match%' ESCAPE '!' $builder->havingLike('title', 'match', 'both'); // Produces: HAVING `title` LIKE '%match%' ESCAPE '!' -
Метод с ассоциативным массивом:
$array = ['title' => $match, 'page1' => $match, 'page2' => $match]; $builder->havingLike($array); // HAVING `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
$builder->orHavingLike()
Этот метод идентичен предыдущему, за исключением того, что несколько экземпляров объединяются оператором ИЛИ:
$builder->havingLike('title', 'match'); $builder->orHavingLike('body', $match);
// HAVING `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
$builder->notHavingLike()
Этот метод идентичен havingLike(), за исключением того, что он генерирует операторы NOT LIKE:
$builder->notHavingLike('title', 'match');
// HAVING `title` NOT LIKE '%match% ESCAPE '!'
$builder->orNotHavingLike()
Этот метод идентичен notHavingLike(), за исключением того, что несколько экземпляров объединяются оператором ИЛИ:
$builder->havingLike('title', 'match');
$builder->orNotHavingLike('body', 'match');
// HAVING `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
Сортировка результатов
$builder->orderBy()
Позволяет установить условие ORDER BY.
Первый параметр содержит имя столбца, по которому вы хотите отсортировать результаты.
Второй параметр позволяет установить направление результата. Доступные варианты — ASC, DESC и RANDOM.
$builder->orderBy('title', 'DESC');
// Produces: ORDER BY `title` DESC
Вы также можете передать свою собственную строку в первом параметре:
$builder->orderBy('title DESC, name ASC');
// Produces: ORDER BY `title` DESC, `name` ASC
Или вы можете сделать несколько вызовов функций, если вам нужно несколько полей.
$builder->orderBy('title', 'DESC');
$builder->orderBy('name', 'ASC');
// Produces: ORDER BY `title` DESC, `name` ASC
Если вы выберите опцию направления RANDOM, то первые параметры будут проигнорированы, если вы не укажете численное значение семени.
$builder->orderBy('title', 'RANDOM');
// Produces: ORDER BY RAND()
$builder->orderBy(42, 'RANDOM');
// Produces: ORDER BY RAND(42)
Примечание
Случайная сортировка в настоящее время не поддерживается в Oracle и по умолчанию будет установлена в ASC.
Ограничение или подсчет результатов
$builder->limit()
Позволяет ограничить количество строк, которые должны быть возвращены запросом:
$builder->limit(10); // Produces: LIMIT 10
Второй параметр позволяет установить смещение результата.
$builder->limit(10, 20); // Produces: LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
$builder->countAllResults()
Позволяет определить количество строк в конкретном запросе Query Builder. Запросы будут принимать ограничения Query Builder, такие как where(), orWhere(), like(), orLike(), и т. д. Пример:
echo $builder->countAllResults(); // Produces an integer, like 25
$builder->like('title', 'match');
$builder->from('my_table');
echo $builder->countAllResults(); // Produces an integer, like 17
Однако этот метод также сбрасывает любые значения полей, которые вы могли передать в select(). Если вам нужно сохранить их, вы можете передать false в качестве первого параметра.
echo $builder->countAllResults(false); // Produces an integer, like 17
$builder->countAll()
Позволяет определить количество строк в определенной таблице. Пример:
echo $builder->countAll(); // Produces an integer, like 25
Как и в методе countAllResults, этот метод сбрасывает любые значения полей, которые вы могли передать в select(). Если вам нужно сохранить их, вы можете передать false в качестве первого параметра.
Группировка запросов
Группировка запросов позволяет создавать группы условий WHERE, заключая их в скобки. Это позволит вам создавать запросы со сложными условиями WHERE. Поддерживаются вложенные группы. Пример:
$builder->select('*')->from('my_table')
->groupStart()
->where('a', 'a')
->orGroupStart()
->where('b', 'b')
->where('c', 'c')
->groupEnd()
->groupEnd()
->where('d', 'd')
->get();
// Generates:
// SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
Примечание
Группы должны быть сбалансированы. Убедитесь, что каждый groupStart() сопоставлен с groupEnd().
$builder->groupStart()
Начинает новую группу, добавляя открывающую скобку к условию WHERE запроса.
$builder->orGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию WHERE запроса, предваряя ее «ИЛИ».
$builder->notGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию WHERE запроса, предваряя ее «НЕ».
$builder->orNotGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию WHERE запроса, предваряя ее «ИЛИ НЕ».
$builder->groupEnd()
Заканчивает текущую группу, добавляя закрывающую скобку к условию WHERE запроса.
$builder->havingGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию HAVING запроса.
$builder->orHavingGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию HAVING запроса, предваряя ее «ИЛИ».
$builder->notHavingGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию HAVING запроса, предваряя ее «НЕ».
$builder->orNotHavingGroupStart()
Начинает новую группу, добавляя открывающую скобку к условию HAVING запроса, предваряя ее «ИЛИ НЕ».
$builder->havingGroupEnd()
Заканчивает текущую группу, добавляя закрывающую скобку к условию HAVING запроса.
Вставка данных
$builder->insert()
Генерирует строку вставки на основе предоставленных данных и выполняет запрос. Вы можете передать либо массив, либо объект в функцию. Вот пример с использованием массива:
$data = [
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date',
];
$builder->insert($data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
Первый параметр — ассоциативный массив значений.
Вот пример с использованием объекта:
class Myclass
{
public $title = 'My Title';
public $content = 'My Content';
public $date = 'My Date';
}
$object = new Myclass;
$builder->insert($object);
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
Первый параметр — объект.
Примечание
Все значения автоматически экранируются, что делает запросы безопаснее.
$builder->ignore()
Генерирует строку вставки игнорирования на основе предоставленных данных и выполняет запрос. Если запись с таким же первичным ключом уже существует, запрос не будет вставлен. Вы можете необязательно передать булево значение в функцию. Вот пример с использованием массива из приведенного выше примера:
$data = [
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date',
];
$builder->ignore(true)->insert($data);
// Produces: INSERT OR IGNORE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
$builder->getCompiledInsert()
Компилирует запрос на вставку так же, как $builder->insert(), но не выполняет запрос. Этот метод просто возвращает запрос SQL в виде строки.
Пример:
$data = [
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date',
];
$sql = $builder->set($data)->getCompiledInsert('mytable');
echo $sql;
// Produces string: INSERT INTO mytable (`title`, `name`, `date`) VALUES ('My title', 'My name', 'My date')
Второй параметр позволяет указать, будет ли сброшен запрос Query Builder (по умолчанию — будет, как и в случае с $builder->insert()):
echo $builder->set('title', 'My Title')->getCompiledInsert('mytable', false);
// Produces string: INSERT INTO mytable (`title`) VALUES ('My Title')
echo $builder->set('content', 'My Content')->getCompiledInsert();
// Produces string: INSERT INTO mytable (`title`, `content`) VALUES ('My Title', 'My Content')
Ключевой момент в приведенном выше примере заключается в том, что второй запрос не использовал $builder->from(), а также не передавал имя таблицы в первый параметр. Причина, по которой это сработало, заключается в том, что запрос не был выполнен с использованием $builder->insert(), что сбрасывает значения, или сброшен напрямую с помощью $builder->resetQuery().
Примечание
Этот метод не работает для пакетных вставок.
$builder->insertBatch()
Генерирует строку вставки на основе предоставленных данных и выполняет запрос. Вы можете передать либо массив, либо объект в функцию. Вот пример с использованием массива:
$data = [
[
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date',
],
[
'title' => 'Another title',
'name' => 'Another Name',
'date' => 'Another date',
],
];
$builder->insertBatch($data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
Первый параметр — ассоциативный массив значений.
Примечание
Все значения автоматически экранируются, что делает запросы безопаснее.
Обновление данных
$builder->replace()
Этот метод выполняет оператор REPLACE, который по сути является стандартным оператором SQL для (необязательного) DELETE + INSERT, используя первичные и уникальные ключи в качестве определяющего фактора. В нашем случае это избавит вас от необходимости реализовывать сложную логику с различными комбинациями select(), update(), delete() и insert() вызовов.
Пример:
$data = [
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date',
];
$builder->replace($data);
// Executes: REPLACE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
В приведенном выше примере, если мы предположим, что поле title является нашим первичным ключом, то если строка, содержащая «Мой заголовок» в качестве значения title, эта строка будет удалена, а наши новые данные строки заменят её.
Использование метода set() также разрешено, и все поля автоматически экранируются, как и при использовании insert().
$builder->set()
Эта функция позволяет задавать значения для вставок или обновлений.
Её можно использовать вместо непосредственного передачи массива данных функциям insert или update:
$builder->set('name', $name);
$builder->insert();
// Produces: INSERT INTO mytable (`name`) VALUES ('{$name}')
Если вы вызываете несколько функций, они будут правильно объединены в зависимости от того, выполняется ли вставка или обновление:
$builder->set('name', $name);
$builder->set('title', $title);
$builder->set('status', $status);
$builder->insert();
set() также принимает необязательный третий параметр ($escape), который предотвратит экранирование данных, если задано значение false. Чтобы проиллюстрировать разницу, вот пример использования set() с параметром экранирования и без него.
$builder->set('field', 'field+1', false);
$builder->where('id', 2);
$builder->update();
// gives UPDATE mytable SET field = field+1 WHERE `id` = 2
$builder->set('field', 'field+1');
$builder->where('id', 2);
$builder->update();
// gives UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2
Вы также можете передать ассоциативный массив в эту функцию:
$array = [
'name' => $name,
'title' => $title,
'status' => $status,
];
$builder->set($array);
$builder->insert();
Или объект:
class Myclass
{
public $title = 'My Title';
public $content = 'My Content';
public $date = 'My Date';
}
$object = new Myclass;
$builder->set($object);
$builder->insert();
$builder->update()
Генерирует строку обновления и выполняет запрос на основе предоставленных данных. Вы можете передать в функцию массив или объект. Вот пример с использованием массива:
$data = [
'title' => $title,
'name' => $name,
'date' => $date,
];
$builder->where('id', $id);
$builder->update($data);
// Produces:
//
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
Или вы можете передать объект:
class Myclass
{
public $title = 'My Title';
public $content = 'My Content';
public $date = 'My Date';
}
$object = new Myclass;
$builder->where('id', $id);
$builder->update($object);
// Produces:
//
// UPDATE `mytable`
// SET `title` = '{$title}', `name` = '{$name}', `date` = '{$date}'
// WHERE id = `$id`
Примечание
Все значения автоматически экранируются, обеспечивая более безопасные запросы.
Вы заметите использование функции $builder->where(), которая позволяет задать условие WHERE. Вы можете необязательно передать эту информацию непосредственно в функцию update в виде строки:
$builder->update($data, "id = 4");
Или в виде массива:
$builder->update($data, ['id' => $id]);
Вы также можете использовать функцию $builder->set() (описанную выше) при выполнении обновлений.
$builder->updateBatch()
Генерирует строку обновления на основе предоставленных данных и выполняет запрос. Вы можете передать в функцию массив или объект. Вот пример с использованием массива:
$data = [
[
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2',
],
[
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2',
],
];
$builder->updateBatch($data, 'title');
// Produces:
// UPDATE `mytable` SET `name` = CASE
// WHEN `title` = 'My title' THEN 'My Name 2'
// WHEN `title` = 'Another title' THEN 'Another Name 2'
// ELSE `name` END,
// `date` = CASE
// WHEN `title` = 'My title' THEN 'My date 2'
// WHEN `title` = 'Another title' THEN 'Another date 2'
// ELSE `date` END
// WHERE `title` IN ('My title','Another title')
Первый параметр — ассоциативный массив значений, второй параметр — ключ условия.
Примечание
affectedRows() не даст правильных результатов с этим методом из-за особенностей его работы. Вместо этого, updateBatch() возвращает количество затронутых строк.
$builder->getCompiledUpdate()
Это работает точно так же, как $builder->getCompiledInsert(), за исключением того, что генерирует строку UPDATE SQL вместо строки INSERT SQL.
Для получения дополнительной информации см. документацию для $builder->getCompiledInsert().
Примечание
Этот метод не работает для пакетных обновлений.
Удаление данных
$builder->delete()
Генерирует строку SQL для удаления и выполняет запрос.
$builder->delete(['id' => $id]); // Produces: // DELETE FROM mytable // WHERE id = $id
Первый параметр — условие WHERE. Вы также можете использовать функции where() или or_where() вместо передачи данных в первый параметр функции:
$builder->where('id', $id);
$builder->delete();
// Produces:
// DELETE FROM mytable
// WHERE id = $id
Если вы хотите удалить все данные из таблицы, вы можете использовать функцию truncate() или emptyTable().
$builder->emptyTable()
Генерирует строку SQL для удаления и выполняет запрос:
$builder->emptyTable('mytable');
// Produces: DELETE FROM mytable
$builder->truncate()
Генерирует строку SQL для усечения и выполняет запрос.
$builder->truncate(); // Produce: // TRUNCATE mytable
Примечание
Если команда TRUNCATE недоступна, truncate() будет выполнена как “DELETE FROM table”.
$builder->getCompiledDelete()
Это работает точно так же, как $builder->getCompiledInsert(), за исключением того, что генерирует строку DELETE SQL вместо строки INSERT SQL.
Для получения дополнительной информации см. документацию для $builder->getCompiledInsert().
Цепочки методов
Цепочки методов позволяют упростить синтаксис, соединяя несколько функций. Рассмотрим этот пример:
$query = $builder->select('title')
->where('id', $id)
->limit(10, 20)
->get();
Сброс Query Builder
$builder->resetQuery()
Сброс Query Builder позволяет начать заново с запросом, не выполняя его предварительно с помощью методов, таких как $builder->get() или $builder->insert().
Это полезно в ситуациях, когда вы используете Query Builder для генерации SQL (например, $builder->getCompiledSelect()), но затем решите, например, выполнить запрос:
// Note that the second parameter of the ``get_compiled_select`` method is false
$sql = $builder->select(['field1','field2'])
->where('field3',5)
->getCompiledSelect(false);
// ...
// Do something crazy with the SQL code... like add it to a cron script for
// later execution or something...
// ...
$data = $builder->get()->getResultArray();
// Would execute and return an array of results of the following query:
// SELECT field1, field1 from mytable where field3 = 5;
Справочник по классу
-
CodeIgniter\Database\BaseBuilder -
-
db() -
Returns: Текущее используемое соединение с базой данных Return type: ConnectionInterfaceВозвращает текущее соединение с базой данных из
$db. Полезно для доступа к методамConnectionInterface, которые недоступны напрямую в Query Builder, например,insertID()илиerrors().
-
resetQuery() -
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderСбрасывает текущее состояние Query Builder. Полезно, когда нужно создать запрос, который может быть отменен при определенных условиях.
-
countAllResults([$reset = true]) -
Parameters: - $reset (bool) – Сбрасывать ли значения для SELECTs
Returns: Количество строк в результате запроса
Return type: int
Генерирует специфичный для платформы запрос, который считает все записи, возвращаемые запросом Query Builder.
-
countAll([$reset = true]) -
Parameters: - $reset (bool) – Сбрасывать ли значения для SELECTs
Returns: Количество строк в результате запроса
Return type: int
Генерирует специфичный для платформы запрос, который считает все записи в конкретной таблице.
-
get([$limit = null[, $offset = null[, $reset = true]]]]) -
Parameters: - $limit (int) – Пункт LIMIT
- $offset (int) – Пункт OFFSET
- $reset (bool) – Нужно ли очистить значения Query Builder?
Returns: \CodeIgniter\Database\ResultInterfaceinstance (method chaining)Return type: \CodeIgniter\Database\ResultInterfaceКомпилирует и выполняет
SELECTинструкцию на основе уже вызванных методов Query Builder.
-
getWhere([$where = null[, $limit = null[, $offset = null[, $reset = true]]]]]) -
Parameters: - $where (string) – Пункт WHERE
- $limit (int) – Пункт LIMIT
- $offset (int) – Пункт OFFSET
- $reset (bool) – Нужно ли очистить значения Query Builder?
Returns: \CodeIgniter\Database\ResultInterfaceinstance (method chaining)Return type: \CodeIgniter\Database\ResultInterfaceТо же, что и
get(), но также позволяет добавить WHERE непосредственно.
-
select([$select = '*'[, $escape = null]]) -
Parameters: - $select (string) – Часть SELECT запроса
- $escape (bool) – Нужно ли экранировать значения и идентификаторы
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderДобавляет пункт
SELECTк запросу.
-
selectAvg([$select = ''[, $alias = '']]) -
Parameters: - $select (string) – Поле для вычисления среднего значения
- $alias (string) – Псевдоним для результирующего имени значения
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderДобавляет пункт
SELECT AVG(field)к запросу.
-
selectMax([$select = ''[, $alias = '']]) -
Parameters: - $select (string) – Поле для вычисления максимального значения
- $alias (string) – Псевдоним для результирующего имени значения
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderДобавляет пункт
SELECT MAX(field)к запросу.
-
selectMin([$select = ''[, $alias = '']]) -
Parameters: - $select (string) – Поле для вычисления минимального значения
- $alias (string) – Псевдоним для результирующего имени значения
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderДобавляет пункт
SELECT MIN(field)к запросу.
-
selectSum([$select = ''[, $alias = '']]) -
Parameters: - $select (string) – Поле для вычисления суммы
- $alias (string) – Псевдоним для результирующего имени значения
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderДобавляет пункт
SELECT SUM(field)к запросу.
-
selectCount([$select = ''[, $alias = '']]) -
Parameters: - $select (string) – Поле для вычисления среднего значения
- $alias (string) – Псевдоним для результирующего имени значения
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderДобавляет пункт
SELECT COUNT(field)к запросу.
-
distinct([$val = true]) -
Parameters: - $val (bool) – Желаемое значение флага “distinct”
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderУстанавливает флаг, который сообщает Query Builder добавить пункт
DISTINCTк частиSELECTзапроса.
-
from($from[, $overwrite = false]) -
Parameters: - $from (mixed) – Имя(имена) таблицы; строка или массив
- $overwrite (bool) – Следует ли удалить первую существующую таблицу?
Returns: BaseBuilderinstance (method chaining)Return type: BaseBuilderУказывает пункт
FROMзапроса.
-
-
join($table, $cond[, $type = ''[, $escape = null]]) -
Параметры: - $table (string) – Имя таблицы для соединения
- $cond (string) – Условие JOIN ON
- $type (string) – Тип JOIN
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
JOINпредложение к запросу.
-
where($key[, $value = null[, $escape = null]]) -
Параметры: - $key (mixed) – Имя поля для сравнения или ассоциативный массив
- $value (mixed) – Если один ключ, сравнивается с этим значением
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
WHEREчасть запроса. Разделяет несколько вызовов с помощьюAND.
-
orWhere($key[, $value = null[, $escape = null]]) -
Параметры: - $key (mixed) – Имя поля для сравнения или ассоциативный массив
- $value (mixed) – Если один ключ, сравнивается с этим значением
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
WHEREчасть запроса. Разделяет несколько вызовов с помощьюOR.
-
orWhereIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Поле для поиска
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
WHEREполеIN('item', 'item')SQL запрос, объединенный сORпри необходимости.
-
orWhereNotIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Поле для поиска
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
WHEREполеNOT IN('item', 'item')SQL запрос, объединенный сORпри необходимости.
-
whereIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Имя поля для проверки
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
WHEREполеIN('item', 'item')SQL запрос, объединенный сANDпри необходимости.
-
whereNotIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Имя поля для проверки
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
WHEREполеNOT IN('item', 'item')SQL запрос, объединенный сANDпри необходимости.
-
groupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает групповое выражение, используя
ANDдля условий внутри него.
-
orGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает групповое выражение, используя
ORдля условий внутри него.
-
notGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает групповое выражение, используя
AND NOTдля условий внутри него.
-
orNotGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает групповое выражение, используя
OR NOTдля условий внутри него.
-
groupEnd() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderЗавершает групповое выражение.
-
like($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Текстовая часть для сопоставления
- $side (string) – С какой стороны выражения разместить подстановочный знак ‘%’
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
- $insensitiveSearch (bool) – Необходимо ли выполнить поиск без учёта регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
LIKEпредложение к запросу, разделяя несколько вызовов с помощьюAND.
-
-
orLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановочного знака ‘%’
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
- $insensitiveSearch (bool) – Необходимо ли принудительно выполнить поиск без учета регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
LIKEусловие к запросу, разделяя несколько классов сOR.
-
notLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановочного знака ‘%’
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
- $insensitiveSearch (bool) – Необходимо ли принудительно выполнить поиск без учета регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
NOT LIKEусловие к запросу, разделяя несколько вызовов сAND.
-
orNotLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановочного знака ‘%’
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
- $insensitiveSearch (bool) – Необходимо ли принудительно выполнить поиск без учета регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
NOT LIKEусловие к запросу, разделяя несколько вызовов сOR.
-
having($key[, $value = null[, $escape = null]]) -
Параметры: - $key (mixed) – Идентификатор (строка) или ассоциативный массив пар поле/значение
- $value (string) – Искомое значение, если $key является идентификатором
- $escape (string) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
HAVINGусловие к запросу, разделяя несколько вызовов сAND.
-
orHaving($key[, $value = null[, $escape = null]]) -
Параметры: - $key (mixed) – Идентификатор (строка) или ассоциативный массив пар поле/значение
- $value (string) – Искомое значение, если $key является идентификатором
- $escape (string) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
HAVINGусловие к запросу, разделяя несколько вызовов сOR.
-
orHavingIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Поле для поиска
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
HAVINGполе IN(‘элемент’, ‘элемент’) SQL-запрос, соединённый сORпри необходимости.
-
orHavingNotIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Поле для поиска
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
HAVINGполеNOT IN('item', 'item')SQL-запрос, соединённый сORпри необходимости.
-
havingIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Имя поля для проверки
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
HAVINGполеIN('item', 'item')SQL-запрос, соединённый сANDпри необходимости.
-
havingNotIn([$key = null[, $values = null[, $escape = null]]]) -
Параметры: - $key (string) – Имя поля для проверки
- $values (array|Closure) – Массив целевых значений или анонимная функция для подзапроса
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
- $insensitiveSearch (bool) – Необходимо ли принудительно выполнить поиск без учёта регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderГенерирует
HAVINGполеNOT IN('item', 'item')SQL-запрос, соединённый сANDпри необходимости.
-
havingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановочного знака ‘%’
- $escape (bool) – Необходимо ли экранировать значения и идентификаторы
- $insensitiveSearch (bool) – Необходимо ли принудительно выполнить поиск без учета регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет
LIKEусловие кHAVINGчасти запроса, разделяя несколько вызовов сAND.
-
-
orHavingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановки «%»
- $escape (bool) – Требуется ли экранирование значений и идентификаторов
- $insensitiveSearch (bool) – Требуется ли поиск без учёта регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условие
LIKEк частиHAVINGзапроса, отделяя несколько условий с помощьюOR.
-
notHavingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановки «%»
- $escape (bool) – Требуется ли экранирование значений и идентификаторов
- $insensitiveSearch (bool) – Требуется ли поиск без учёта регистра
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условие
NOT LIKEк частиHAVINGзапроса, отделяя несколько вызовов с помощьюAND.
-
orNotHavingLike($field[, $match = ''[, $side = 'both'[, $escape = null[, $insensitiveSearch = false]]]]) -
Параметры: - $field (string) – Имя поля
- $match (string) – Часть текста для сопоставления
- $side (string) – Какую сторону выражения использовать для подстановки подстановки «%»
- $escape (bool) – Требуется ли экранирование значений и идентификаторов
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условие
NOT LIKEк частиHAVINGзапроса, отделяя несколько вызовов с помощьюOR.
-
havingGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает выражение группы для условия
HAVING, используяANDдля условий внутри него.
-
orHavingGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает выражение группы для условия
HAVING, используяORдля условий внутри него.
-
notHavingGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает выражение группы для условия
HAVING, используяAND NOTдля условий внутри него.
-
orNotHavingGroupStart() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderНачинает выражение группы для условия
HAVING, используяOR NOTдля условий внутри него.
-
havingGroupEnd() -
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderЗавершает выражение группы для условия
HAVING.
-
groupBy($by[, $escape = null]) -
Параметры: - $by (mixed) – Поле(я) для группировки; строка или массив
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условие
GROUP BYк запросу.
-
orderBy($orderby[, $direction = ''[, $escape = null]]) -
Параметры: - $orderby (string) – Поле для сортировки
- $direction (string) – Требуемый порядок - ASC, DESC или random
- $escape (bool) – Требуется ли экранирование значений и идентификаторов
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условие
ORDER BYк запросу.
-
limit($value[, $offset = 0]) -
Параметры: - $value (int) – Количество строк для ограничения результатов
- $offset (int) – Количество строк для пропуска
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условия
LIMITиOFFSETк запросу.
-
offset($offset) -
Параметры: - $offset (int) – Количество строк для пропуска
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет условие
OFFSETк запросу.
-
set($key[, $value = ''[, $escape = null]]) -
Параметры: - $key (mixed) – Имя поля или массив пар поле/значение
- $value (mixed) – Значение поля, если $key – одно поле
- $escape (bool) – Требуется ли экранирование значений
Возвращает: BaseBuilderэкземпляр (цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет пары поле/значение, которые будут переданы позднее в
insert(),update()илиreplace().
-
insert([$set = null[, $escape = null]]) -
Параметры: - $set (array) – Ассоциативный массив пар поле/значение
- $escape (bool) – Требуется ли экранирование значений
Возвращает: trueпри успехе,falseпри ошибкеТип возвращаемого значения: bool
Компилирует и выполняет оператор
INSERT.
-
-
insertBatch([$set = null[, $escape = null[, $batch_size = 100]]]) -
Параметры: - $set (array) – Данные для вставки
- $escape (bool) – Нужно ли экранировать значения
- $batch_size (int) – Количество строк для вставки за раз
Возвращает: Количество вставленных строк или
falseпри ошибкеТип возвращаемого значения: int|false
Компилирует и выполняет пакетные
INSERTоператоры.Примечание
Если предоставлено более
$batch_sizeстрок, будут выполнены несколькоINSERTзапросов, каждый из которых будет пытаться вставить до$batch_sizeстрок.
-
setInsertBatch($key[, $value = ''[, $escape = null]]) -
Параметры: - $key (mixed) – Имя поля или массив пар поле/значение
- $value (string) – Значение поля, если $key — единственное поле
- $escape (bool) – Нужно ли экранировать значения
Возвращает: Экземпляр
BaseBuilder(цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет пары поле/значение, которые будут вставлены в таблицу позже с помощью
insertBatch().
-
update([$set = null[, $where = null[, $limit = null]]]) -
Параметры: - $set (array) – Ассоциативный массив пар поле/значение
- $where (string) – Оператор WHERE
- $limit (int) – Оператор LIMIT
Возвращает: trueпри успехе,falseпри ошибкеТип возвращаемого значения: bool
Компилирует и выполняет оператор
UPDATE.
-
updateBatch([$set = null[, $value = null[, $batch_size = 100]]]) -
Параметры: - $set (array) – Имя поля или ассоциативный массив пар поле/значение
- $value (string) – Значение поля, если $set — единственное поле
- $batch_size (int) – Количество условий для группировки в одном запросе
Возвращает: Количество обновлённых строк или
falseпри ошибкеТип возвращаемого значения: int|false
Компилирует и выполняет пакетные
UPDATEоператоры.Примечание
Если предоставлено более
$batch_sizeпар поле/значение, будут выполнены несколько запросов, каждый из которых обработает до$batch_sizeпар поле/значение.
-
setUpdateBatch($key[, $value = ''[, $escape = null]]) -
Параметры: - $key (mixed) – Имя поля или массив пар поле/значение
- $value (string) – Значение поля, если $key — единственное поле
- $escape (bool) – Нужно ли экранировать значения
Возвращает: Экземпляр
BaseBuilder(цепочка методов)Тип возвращаемого значения: BaseBuilderДобавляет пары поле/значение, которые будут обновлены в таблице позже с помощью
updateBatch().
-
replace([$set = null]) -
Параметры: - $set (array) – Ассоциативный массив пар поле/значение
Возвращает: trueпри успехе,falseпри ошибкеТип возвращаемого значения: bool
Компилирует и выполняет оператор
REPLACE.
-
delete([$where = ''[, $limit = null[, $reset_data = true]]]) -
Параметры: - $where (string) – Оператор WHERE
- $limit (int) – Оператор LIMIT
- $reset_data (bool) – true для сброса условия запроса “запись”
Возвращает: экземпляр
BaseBuilder(цепочка методов) илиfalseпри ошибкеТип возвращаемого значения: BaseBuilder|falseКомпилирует и выполняет запрос
DELETE.
-
increment($column[, $value = 1]) -
Параметры: - $column (string) – Имя столбца для инкремента
- $value (int) – Значение для инкремента столбца
Увеличивает значение поля на указанную величину. Если поле не является числовым, например,
VARCHAR, оно, вероятно, будет заменено на$value.
-
decrement($column[, $value = 1]) -
Параметры: - $column (string) – Имя столбца для декремента
- $value (int) – Значение для декремента столбца
Уменьшает значение поля на указанную величину. Если поле не является числовым, например,
VARCHAR, оно, вероятно, будет заменено на$value.
-
truncate() -
Возвращает: trueпри успехе,falseпри ошибке, строка в режиме тестированияТип возвращаемого значения: bool|string Выполняет оператор
TRUNCATEв таблице.Примечание
Если платформа базы данных, используемая в данный момент, не поддерживает
TRUNCATE, будет использован операторDELETE.
-
emptyTable() -
Возвращает: trueпри успехе,falseпри ошибкеТип возвращаемого значения: bool Удаляет все записи из таблицы с помощью оператора
DELETE.
-
getCompiledSelect([$reset = true]) -
Параметры: - $reset (bool) – Нужно ли сбрасывать текущие значения QB?
Возвращает: Скомпилированное SQL-выражение в виде строки
Тип возвращаемого значения: string
Компилирует оператор
SELECTи возвращает его в виде строки.
-
getCompiledInsert([$reset = true]) -
Параметры: - $reset (bool) – Нужно ли сбрасывать текущие значения QB?
Возвращает: Скомпилированное SQL-выражение в виде строки
Тип возвращаемого значения: string
Компилирует оператор
INSERTи возвращает его в виде строки.
-
-
getCompiledUpdate([$reset = true]) -
Параметры: - $reset (bool) – Нужно ли сбросить текущие значения QB?
Возвращает: Скомпилированное SQL-выражение в виде строки
Тип возвращаемого значения: строка
Компилирует
UPDATEвыражение и возвращает его в виде строки.
-
getCompiledDelete([$reset = true]) -
Параметры: - $reset (bool) – Нужно ли сбросить текущие значения QB?
Возвращает: Скомпилированное SQL-выражение в виде строки
Тип возвращаемого значения: строка
Компилирует
DELETEвыражение и возвращает его в виде строки.
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/database/query_builder.html