Проверка ограничения внешнего ключа Codeigniter

Позвольте мне сначала объяснить структуру таблицы:

<code>+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| firstname | varchar(255) | NO   |     | NULL    |                |
| name      | varchar(255) | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
</code>

На поле идентификатора ссылаются из другой таблицы через внешний ключ.

Скажем, у меня есть функция в моей модели:

<code>public function delete_user($id) {
    return $this->db->delete('users', array('id' => $id));
}
</code>

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

<code>Error Number: 1451

Cannot delete or update a parent row: a foreign key constraint fails (`testing`.`users_link`, CONSTRAINT `users_link_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))

DELETE FROM `users` WHERE `id` = '1'
</code>

Есть ли способ заставить функцию delete_user возвращать FALSE вместо отображения ошибки? Я хотел бы уведомить пользователя, что он должен сделать что-то еще в первую очередь. Я пытался использовать транзакции и возвращать транзакции, но это все равно выдает ошибку.

 Satya05 мая 2012 г., 17:49
ну, тебе нужно изменить функцию удаления
 EsTeGe05 мая 2012 г., 17:49
Сам нашел ответ: $ db ['default'] ['db_debug'] = FALSE; и ошибки больше не отображаются, поэтому я могу показывать свои собственные сообщения об ошибках:)

Ответы на вопрос(1)

Решение Вопроса

в файле config.php найдите строку

$db['default']['db_debug']

и установите его в ЛОЖЬ. Это не позволит Codeigniter выводить ошибку на экран.

Также в функции удаления вы можете проверить:

if ($this->db->_error_number() == 1451)

Если тебе нужно сделать что-то особенное, когда это произойдет.

 Matt Swanson19 авг. 2016 г., 17:10
Если вы ищете$db['default']['db_debug'] line, находится в/application/config/database.php если используется среда по умолчанию.
 CodeGodie12 июн. 2015 г., 21:19
Помните, что в Codeigniter 3.0 (CI3) это теперь$errors = $this->db->error();

Ваш ответ на вопрос