I need to add some extra fields to a bunch of entities/classes and i would like to get those fields included in each entity/class. I could write all the fields in each class and it will work but i'm looking for a way to centralize the definitions of the fields and related methods, just to make it more maintainable and let me distribute modification, just editing a single file. I got it working using inheritance but in that manner, there will be a parent class/table, which will keep track of the children classes/tables either with *@InheritanceType("SINGLE_TABLE")* or @InheritanceType("JOINED") and this could dramatically affect the performances, as the number of records will increase. I do not have any advantage in using inheritance here, as well.
A simple example to clarify the problem:
Code for fields i want to include in some class
filename: myfields.php
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="created_at",type="datetime")
*/
protected $createdAt;
/**
* @ORM\Column(name="modified_at", type="datetime")
*/
protected $modifiedAt;
public function getId()
{
return $this->id;
}
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
public function getCreatedAt()
{
return $this->createdAt;
}
public function setModifiedAt($modifiedAt)
{
$this->modifiedAt = $modifiedAt;
return $this;
}
public function getModifiedAt()
{
return $this->modifiedAt;
}
filename: Car.php
@ORM\Entity()
@ORM\Table(name="car")
class Car
{
/**
* @ORM\Column(name="model", type="string")
*/
protected model;
/**
* @ORM\Column(name="price", type="decimal")
*/
protected price;
// related setter and getters methods
//Include myfields.php
}
filename: Animal.php
@ORM\Entity()
@ORM\Table(name="animal")
class Animal
{
/**
* @ORM\Column(name="species", type="string")
*/
protected species;
// related setter and getters methods
//Include myfields.php
}
I don't want to make something like class Animal extends MyFields but I would like just to import and let store the common informations in each entity table. If i will need to add some extra-field or just to modify some method, i will modify just "myfields.php" and it will be propagated to all the Entities that include it.
For sure in symfony i have to launch: php app/console doctrine:schema:update --force and the structure will be modified fo all the classes that include it.