Can someone use simple words to explain Collections, especially ArrayCollection
s, in entities to me? What are they? When and how to use them?
(Maybe provide a simple example).
So the ArrayCollection
is a simple class that implements Countable
, IteratorAggregate
, ArrayAccess
SPL interfaces, and the interface Selectable
made by Benjamin Eberlei.
Not much information there if you are not familliar with SPL
interfaces, but ArrayCollection
- permit you to save the object instances in an array like form but in an OOP way. The benefit of using the ArrayCollection
, instead of standard array
is that this will save you a lot of time and work, when you will need simple methods like count
, set
, unset
iterate to a certain object, and most of all very important:
ArrayCollection
in his core and is doing a lot of things for you if you configure it well:
When to use it:
Usually it is used for the object relationship mapping, when using doctrine
, it is recommended to just add annotations
for your properties and then after the command doctrine:generate:entity
the setters and getters will be created, and for relationships like one-to-many|many-to-many
in the constructor class will be instantiated the ArrayCollection
class instead of just a simple array
public function __construct()
{
$this->orders = new ArrayCollection();
}
An example of use:
public function indexAction()
{
$em = $this->getDoctrine();
$client = $em->getRepository('AcmeCustomerBundle:Customer')
->find($this->getUser());
// When you will need to lazy load all the orders for your
// customer that is an one-to-many relationship in the database
// you use it:
$orders = $client->getOrders(); //getOrders is an ArrayCollection
}
Actually you are not using it directly but you use it when you configure your models when setting setters and getters.