Manipulate the Akeneo PIM data
#How to Query Non-Product Objects
#Prerequisites
The Akeneo PIM project introduces services to help you manage your objects.
Product is the main object of the application and has a large set of services to build and execute queries.
For all other simpler objects (such as Attribute, Family, Category, Channel, Locale etc), we use quite common Doctrine repositories.
#Instantiate an ObjectRepository
Doctrine is widely used in the application for persisting and reading information to and from a database.
For each object, a repository which implements Doctrine\Common\Persistence\ObjectRepository
is provided.
These classes embed the logic to build and execute queries and are defined as services that you can fetch from the container.
$attributeRepository = $this->getContainer()->get('pim_catalog.repository.attribute');
$categoryRepository = $this->getContainer()->get('pim_catalog.repository.category');
$localeRepository = $this->getContainer()->get('pim_catalog.repository.locale');
// ...
#Use an ObjectRepository
Each repository dedicated to a common object provides methods from the interface Doctrine\Common\Persistence\ObjectRepository
.
The following methods are available.
// Finds an object by its primary key / identifier.
public function find($id);
// Finds all objects in the repository.
public function findAll();
// Finds objects by a set of criteria.
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null);
// Finds a single object by a set of criteria.
public function findOneBy(array $criteria);
Don’t hesitate to have a look at Doctrine documentation for further information.
Each dedicated repository also implements its own business interface, for instance, Pim\Bundle\CatalogBundle\Repository\AttributeRepositoryInterface
.
This business interface provides several dedicated methods and we strongly recommend to rely on this interface in your developments.
$attributeCode = $attributeRepository->getIdentifierCode();
$categories = $categoryRepository->getAllChildrenIds($myCategory);
$locales = $localeRepository->getActivatedLocales();
// ...
In your own developments, you should always put the code which builds and executes queries in your own repositories.
Found a typo or a hole in the documentation and feel like contributing?
Join us on Github!