<?php namespace Doctrine\Tests\Models\Company; /** * Description of CompanyPerson * * @author robo * @Entity * @Table(name="company_persons") * @InheritanceType("JOINED") * @DiscriminatorColumn(name="discr", type="string") * @DiscriminatorMap({ * "person" = "CompanyPerson", * "manager" = "CompanyManager", * "employee" = "CompanyEmployee" * }) * * @NamedNativeQueries({ * @NamedNativeQuery( * name = "fetchAllWithResultClass", * resultClass = "__CLASS__", * query = "SELECT id, name, discr FROM company_persons ORDER BY name" * ), * @NamedNativeQuery( * name = "fetchAllWithSqlResultSetMapping", * resultSetMapping= "mappingFetchAll", * query = "SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name" * ) * }) * * @SqlResultSetMappings({ * @SqlResultSetMapping( * name = "mappingFetchAll", * entities= { * @EntityResult( * entityClass = "__CLASS__", * discriminatorColumn = "discriminator", * fields = { * @FieldResult("id"), * @FieldResult("name"), * } * ) * } * ) * }) */ class CompanyPerson { /** * @Id * @Column(type="integer") * @GeneratedValue */ private $id; /** * @Column */ private $name; /** * @OneToOne(targetEntity="CompanyPerson") * @JoinColumn(name="spouse_id", referencedColumnName="id", onDelete="CASCADE") */ private $spouse; /** * @ManyToMany(targetEntity="CompanyPerson") * @JoinTable( * name="company_persons_friends", * joinColumns={ * @JoinColumn(name="person_id", referencedColumnName="id", onDelete="CASCADE") * }, * inverseJoinColumns={ * @JoinColumn(name="friend_id", referencedColumnName="id", onDelete="CASCADE") * } * ) */ private $friends; public function __construct() { $this->friends = new \Doctrine\Common\Collections\ArrayCollection; } public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getSpouse() { return $this->spouse; } public function getFriends() { return $this->friends; } public function addFriend(CompanyPerson $friend) { if ( ! $this->friends->contains($friend)) { $this->friends->add($friend); $friend->addFriend($this); } } public function setSpouse(CompanyPerson $spouse) { if ($spouse !== $this->spouse) { $this->spouse = $spouse; $this->spouse->setSpouse($this); } } public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) { $metadata->setPrimaryTable(array( 'name' => 'company_person', )); $metadata->addNamedNativeQuery(array ( 'name' => 'fetchAllWithResultClass', 'query' => 'SELECT id, name, discr FROM company_persons ORDER BY name', 'resultClass' => 'Doctrine\\Tests\\Models\\Company\\CompanyPerson', )); $metadata->addNamedNativeQuery(array ( 'name' => 'fetchAllWithSqlResultSetMapping', 'query' => 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', 'resultSetMapping' => 'mappingFetchAll', )); $metadata->addSqlResultSetMapping(array ( 'name' => 'mappingFetchAll', 'columns' => array(), 'entities' => array ( array ( 'fields' => array ( array ( 'name' => 'id', 'column' => 'id', ), array ( 'name' => 'name', 'column' => 'name', ), ), 'entityClass' => 'Doctrine\Tests\Models\Company\CompanyPerson', 'discriminatorColumn' => 'discriminator', ), ), )); } }