У меня есть таблица SQLite, которая содержит данные об изображениях. Один столбец position
представляет собой текстовое поле, в котором это изображение должно отображаться на сайте. Это поле имеет уникальное ограничение. Вот определение таблицы:
CREATE TABLE images (id INTEGER PRIMARY KEY, title TEXT UNIQUE NOT NULL, position TEXT UNIQUE
NOT NULL, caption TEXT, filename TEXT, album INTEGER NOT NULL, publicationDate TEXT, updated
TEXT, createdBy INTEGER
NOT NULL, updatedBy INTEGER NOT NULL, FOREIGN KEY (createdBy) REFERENCES users(id), FOREIGN KEY
(album) REFERENCES albums(id), FOREIGN KEY (updatedBy) REFERENCES users(id));
И, соответствующие биты от объекта:
/**
* @ORM\Entity
* @ORM\Table(name="images",indexes={
* @Index(name="publication_date", columns={"publicationDate"})},
* uniqueConstraints={@UniqueConstraint(name="unique_position", columns={"position", "fileName"})}
* )
*/
class Image
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
**/
protected $id;
/**
* @ORM\Column(type="string", unique=true)
*/
protected $position;
Я могу успешно записать в таблицу (Doctrine сохранится, затем грипп sh) если не существует уникального нарушения ограничения для столбца position
. При уникальном нарушении ограничения flu sh () молча завершается сбоем (без записи в БД), и приложение продолжает выполняться. Вот соответствующий код - после настройки и сохранения сущности:
try {
$this->entityManager->flush();
$message['type'] = 'alert-info';
$message['content'] = "$title added succesfully";
return $message;
} catch (UniqueConstraintViolationException $e) {
$message['type'] = 'alert-danger';
$message['content'] = "$title could not be added " . $e;
return $this->create($message, $formVars);
} catch (Exception $e) {
$message['type'] = 'alert-danger';
$message['content'] = "$title could not be added " . $e;
return $this->create($message, $formVars);
}
Почему я не улавливаю исключение? Или это вообще не брошено?