since I'm quite new to Symfony and Doctrine I got a maybe stupid question ;-)
Can someone use simple words to explain Collections (especially ArrayCollections in entities) to me? What is it and when and how to use them? (Maybe in an simple example)
Couldn't figure it out quite well in the docs...
Thanks in advance.
An ArrayCollection is a Collection implementation that wraps a regular PHP array.
Persistent collections are treated as value objects by Hibernate. ie. they have no independent existence beyond the object holding a reference to them. Unlike instances of entity classes, they are automatically deleted when unreferenced and automatically become persistent when held by a persistent object.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With