--- /dev/null
+<?php
+
+namespace Doctrine\Tests\Models\CMS;
+
+use Doctrine\Common\Collections\ArrayCollection;
+
+/**
+ * @Entity
+ * @Table(name="cms_users")
+ * @NamedQueries({
+ * @NamedQuery(name="all", query="SELECT u FROM __CLASS__ u")
+ * })
+ *
+ * @NamedNativeQueries({
+ * @NamedNativeQuery(
+ * name = "fetchIdAndUsernameWithResultClass",
+ * resultClass = "CmsUser",
+ * query = "SELECT id, username FROM cms_users WHERE username = ?"
+ * ),
+ * @NamedNativeQuery(
+ * name = "fetchAllColumns",
+ * resultClass = "CmsUser",
+ * query = "SELECT * FROM cms_users WHERE username = ?"
+ * ),
+ * @NamedNativeQuery(
+ * name = "fetchJoinedAddress",
+ * resultSetMapping= "mappingJoinedAddress",
+ * query = "SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?"
+ * ),
+ * @NamedNativeQuery(
+ * name = "fetchJoinedPhonenumber",
+ * resultSetMapping= "mappingJoinedPhonenumber",
+ * query = "SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?"
+ * ),
+ * @NamedNativeQuery(
+ * name = "fetchUserPhonenumberCount",
+ * resultSetMapping= "mappingUserPhonenumberCount",
+ * query = "SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username"
+ * ),
+ * @NamedNativeQuery(
+ * name = "fetchMultipleJoinsEntityResults",
+ * resultSetMapping= "mappingMultipleJoinsEntityResults",
+ * query = "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username"
+ * ),
+ * })
+ *
+ * @SqlResultSetMappings({
+ * @SqlResultSetMapping(
+ * name = "mappingJoinedAddress",
+ * entities= {
+ * @EntityResult(
+ * entityClass = "__CLASS__",
+ * fields = {
+ * @FieldResult(name = "id"),
+ * @FieldResult(name = "name"),
+ * @FieldResult(name = "status"),
+ * @FieldResult(name = "address.zip"),
+ * @FieldResult(name = "address.city"),
+ * @FieldResult(name = "address.country"),
+ * @FieldResult(name = "address.id", column = "a_id"),
+ * }
+ * )
+ * }
+ * ),
+ * @SqlResultSetMapping(
+ * name = "mappingJoinedPhonenumber",
+ * entities= {
+ * @EntityResult(
+ * entityClass = "CmsUser",
+ * fields = {
+ * @FieldResult("id"),
+ * @FieldResult("name"),
+ * @FieldResult("status"),
+ * @FieldResult("phonenumbers.phonenumber" , column = "number"),
+ * }
+ * )
+ * }
+ * ),
+ * @SqlResultSetMapping(
+ * name = "mappingUserPhonenumberCount",
+ * entities= {
+ * @EntityResult(
+ * entityClass = "CmsUser",
+ * fields = {
+ * @FieldResult(name = "id"),
+ * @FieldResult(name = "name"),
+ * @FieldResult(name = "status"),
+ * }
+ * )
+ * },
+ * columns = {
+ * @ColumnResult("numphones")
+ * }
+ * ),
+ * @SqlResultSetMapping(
+ * name = "mappingMultipleJoinsEntityResults",
+ * entities= {
+ * @EntityResult(
+ * entityClass = "__CLASS__",
+ * fields = {
+ * @FieldResult(name = "id", column="u_id"),
+ * @FieldResult(name = "name", column="u_name"),
+ * @FieldResult(name = "status", column="u_status"),
+ * }
+ * ),
+ * @EntityResult(
+ * entityClass = "CmsAddress",
+ * fields = {
+ * @FieldResult(name = "id", column="a_id"),
+ * @FieldResult(name = "zip", column="a_zip"),
+ * @FieldResult(name = "country", column="a_country"),
+ * }
+ * )
+ * },
+ * columns = {
+ * @ColumnResult("numphones")
+ * }
+ * )
+ * })
+ */
+class CmsUser
+{
+ /**
+ * @Id @Column(type="integer")
+ * @GeneratedValue
+ */
+ public $id;
+ /**
+ * @Column(type="string", length=50, nullable=true)
+ */
+ public $status;
+ /**
+ * @Column(type="string", length=255, unique=true)
+ */
+ public $username;
+ /**
+ * @Column(type="string", length=255)
+ */
+ public $name;
+ /**
+ * @OneToMany(targetEntity="CmsPhonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true)
+ */
+ public $phonenumbers;
+ /**
+ * @OneToMany(targetEntity="CmsArticle", mappedBy="user", cascade={"detach"})
+ */
+ public $articles;
+ /**
+ * @OneToOne(targetEntity="CmsAddress", mappedBy="user", cascade={"persist"}, orphanRemoval=true)
+ */
+ public $address;
+ /**
+ * @OneToOne(targetEntity="CmsEmail", inversedBy="user", cascade={"persist"}, orphanRemoval=true)
+ * @JoinColumn(referencedColumnName="id", nullable=true)
+ */
+ public $email;
+ /**
+ * @ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist", "merge", "detach"})
+ * @JoinTable(name="cms_users_groups",
+ * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
+ * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
+ * )
+ */
+ public $groups;
+
+ public $nonPersistedProperty;
+
+ public $nonPersistedPropertyObject;
+
+ public function __construct() {
+ $this->phonenumbers = new ArrayCollection;
+ $this->articles = new ArrayCollection;
+ $this->groups = new ArrayCollection;
+ }
+
+ public function getId() {
+ return $this->id;
+ }
+
+ public function getStatus() {
+ return $this->status;
+ }
+
+ public function getUsername() {
+ return $this->username;
+ }
+
+ public function getName() {
+ return $this->name;
+ }
+
+ /**
+ * Adds a phonenumber to the user.
+ *
+ * @param CmsPhonenumber $phone
+ */
+ public function addPhonenumber(CmsPhonenumber $phone) {
+ $this->phonenumbers[] = $phone;
+ $phone->setUser($this);
+ }
+
+ public function getPhonenumbers() {
+ return $this->phonenumbers;
+ }
+
+ public function addArticle(CmsArticle $article) {
+ $this->articles[] = $article;
+ $article->setAuthor($this);
+ }
+
+ public function addGroup(CmsGroup $group) {
+ $this->groups[] = $group;
+ $group->addUser($this);
+ }
+
+ public function getGroups() {
+ return $this->groups;
+ }
+
+ public function removePhonenumber($index) {
+ if (isset($this->phonenumbers[$index])) {
+ $ph = $this->phonenumbers[$index];
+ unset($this->phonenumbers[$index]);
+ $ph->user = null;
+ return true;
+ }
+ return false;
+ }
+
+ public function getAddress() { return $this->address; }
+
+ public function setAddress(CmsAddress $address) {
+ if ($this->address !== $address) {
+ $this->address = $address;
+ $address->setUser($this);
+ }
+ }
+
+ public function getEmail() { return $this->email; }
+
+ public function setEmail(CmsEmail $email = null) {
+ if ($this->email !== $email) {
+ $this->email = $email;
+
+ if ($email) {
+ $email->setUser($this);
+ }
+ }
+ }
+
+ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)
+ {
+ $metadata->setPrimaryTable(array(
+ 'name' => 'cms_users',
+ ));
+
+ $metadata->addNamedNativeQuery(array (
+ 'name' => 'fetchIdAndUsernameWithResultClass',
+ 'query' => 'SELECT id, username FROM cms_users WHERE username = ?',
+ 'resultClass' => 'Doctrine\\Tests\\Models\\CMS\\CmsUser',
+ ));
+
+ $metadata->addNamedNativeQuery(array (
+ 'name' => 'fetchAllColumns',
+ 'query' => 'SELECT * FROM cms_users WHERE username = ?',
+ 'resultClass' => 'Doctrine\\Tests\\Models\\CMS\\CmsUser',
+ ));
+
+ $metadata->addNamedNativeQuery(array (
+ 'name' => 'fetchJoinedAddress',
+ 'query' => 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?',
+ 'resultSetMapping' => 'mappingJoinedAddress',
+ ));
+
+ $metadata->addNamedNativeQuery(array (
+ 'name' => 'fetchJoinedPhonenumber',
+ 'query' => 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?',
+ 'resultSetMapping' => 'mappingJoinedPhonenumber',
+ ));
+
+ $metadata->addNamedNativeQuery(array (
+ 'name' => 'fetchUserPhonenumberCount',
+ 'query' => 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username',
+ 'resultSetMapping' => 'mappingUserPhonenumberCount',
+ ));
+
+ $metadata->addNamedNativeQuery(array (
+ "name" => "fetchMultipleJoinsEntityResults",
+ "resultSetMapping" => "mappingMultipleJoinsEntityResults",
+ "query" => "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username"
+ ));
+
+ $metadata->addSqlResultSetMapping(array (
+ 'name' => 'mappingJoinedAddress',
+ 'columns' => array(),
+ 'entities' => array(array (
+ 'fields'=> array (
+ array (
+ 'name' => 'id',
+ 'column' => 'id',
+ ),
+ array (
+ 'name' => 'name',
+ 'column' => 'name',
+ ),
+ array (
+ 'name' => 'status',
+ 'column' => 'status',
+ ),
+ array (
+ 'name' => 'address.zip',
+ 'column' => 'zip',
+ ),
+ array (
+ 'name' => 'address.city',
+ 'column' => 'city',
+ ),
+ array (
+ 'name' => 'address.country',
+ 'column' => 'country',
+ ),
+ array (
+ 'name' => 'address.id',
+ 'column' => 'a_id',
+ ),
+ ),
+ 'entityClass' => 'Doctrine\Tests\Models\CMS\CmsUser',
+ 'discriminatorColumn' => null
+ ),
+ ),
+ ));
+
+ $metadata->addSqlResultSetMapping(array (
+ 'name' => 'mappingJoinedPhonenumber',
+ 'columns' => array(),
+ 'entities' => array(array(
+ 'fields'=> array (
+ array (
+ 'name' => 'id',
+ 'column' => 'id',
+ ),
+ array (
+ 'name' => 'name',
+ 'column' => 'name',
+ ),
+ array (
+ 'name' => 'status',
+ 'column' => 'status',
+ ),
+ array (
+ 'name' => 'phonenumbers.phonenumber',
+ 'column' => 'number',
+ ),
+ ),
+ 'entityClass' => 'Doctrine\\Tests\\Models\\CMS\\CmsUser',
+ 'discriminatorColumn' => null
+ ),
+ ),
+ ));
+
+ $metadata->addSqlResultSetMapping(array (
+ 'name' => 'mappingUserPhonenumberCount',
+ 'columns' => array(),
+ 'entities' => array (
+ array(
+ 'fields' => array (
+ array (
+ 'name' => 'id',
+ 'column' => 'id',
+ ),
+ array (
+ 'name' => 'name',
+ 'column' => 'name',
+ ),
+ array (
+ 'name' => 'status',
+ 'column' => 'status',
+ )
+ ),
+ 'entityClass' => 'Doctrine\Tests\Models\CMS\CmsUser',
+ 'discriminatorColumn' => null
+ )
+ ),
+ 'columns' => array (
+ array (
+ 'name' => 'numphones',
+ )
+ )
+ ));
+
+ $metadata->addSqlResultSetMapping(array(
+ 'name' => 'mappingMultipleJoinsEntityResults',
+ 'entities' => array(array(
+ 'fields' => array(
+ array(
+ 'name' => 'id',
+ 'column' => 'u_id',
+ ),
+ array(
+ 'name' => 'name',
+ 'column' => 'u_name',
+ ),
+ array(
+ 'name' => 'status',
+ 'column' => 'u_status',
+ )
+ ),
+ 'entityClass' => 'Doctrine\Tests\Models\CMS\CmsUser',
+ 'discriminatorColumn' => null,
+ ),
+ array(
+ 'fields' => array(
+ array(
+ 'name' => 'id',
+ 'column' => 'a_id',
+ ),
+ array(
+ 'name' => 'zip',
+ 'column' => 'a_zip',
+ ),
+ array(
+ 'name' => 'country',
+ 'column' => 'a_country',
+ ),
+ ),
+ 'entityClass' => 'Doctrine\Tests\Models\CMS\CmsAddress',
+ 'discriminatorColumn' => null,
+ ),
+ ),
+ 'columns' => array(array(
+ 'name' => 'numphones',
+ )
+ )
+ ));
+
+ }
+}