# Reference Integrity behavior extension for Doctrine 2
**ReferenceIntegrity** behavior will automate the reference integrity for referenced documents.
It works through annotations and yaml, and supports 'nullify' and 'restrict' which throws an exception.
So let's say you have a Type which is referenced to multiple Articles, when deleting the Type, by default the Article
would still have a reference to Type, since Mongo doesn't care. When setting the ReferenceIntegrity to 'nullify' it
would then automatically remove the reference from Article.
Features:
- Automatically remove referenced association
- ODM only
- ReferenceOne and ReferenceMany support
- 'nullify' and 'restrict' support
- Annotation and Yaml mapping support for extensions
**Symfony:**
- **ReferenceIntegrity** is available as [Bundle](http://github.com/stof/StofDoctrineExtensionsBundle)
for **Symfony2**, together with all other extensions
This article will cover the basic installation and functionality of **ReferenceIntegrity** behavior
Content:
- [Including](#including-extension) the extension
- Document [example](#document-mapping)
- [Yaml](#yaml-mapping) mapping example
- Usage [examples](#advanced-examples)
## Setup and autoloading
Read the [documentation](http://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/annotations.md#em-setup)
or check the [example code](http://github.com/l3pp4rd/DoctrineExtensions/tree/master/example)
on how to setup and use the extensions in most optimized way.
## ReferenceIntegrity Document example:
``` php
## Yaml mapping example:
Yaml mapped Article: **/mapping/yaml/Documents.Article.dcm.yml**
```
---
Document\Type:
type: document
collection: types
fields:
id:
id: true
title:
type: string
article:
reference: true
type: one
mappedBy: type
targetDocument: Document\Article
gedmo:
referenceIntegrity: nullify # or restrict
```
It is necessary to have the 'mappedBy' option set, to be able to access the referenced documents.
## Usage examples:
Few operations to see it in action:
``` php
setTitle('My Article');
$type = new Type;
$type->setTitle('Published');
$article = $em->getRepository('Entity\Article')->findByTitle('My Article');
$article->setType($type);
$em->persist($article);
$em->persist($type);
$em->flush();
$type = $em->getRepository('Entity\Type')->findByTitle('Published');
$em->remove($type);
$em->flush();
$article = $em->getRepository('Entity\Article')->findByTitle('My Article');
$article->getType(); // won't be referenced to Type anymore
```
When 'ReferenceIntegrity' is set to 'restrict' a `ReferenceIntegrityStrictException` will be thrown, only when there
is a referenced document.
Easy like that, any suggestions on improvements are very welcome