2. The Product¶
Danger
We’re sorry but this documentation section is outdated. Please have that in mind when trying to use it. You can help us making documentation up to date via Sylius Github. Thank you!
2.1. Retrieving products¶
Retrieving a product from the database should always happen via repository, which always implements Sylius\Bundle\ResourceBundle\Model\RepositoryInterface
.
If you are using Doctrine, you’re already familiar with this concept, as it extends the native Doctrine ObjectRepository
interface.
Your product repository is always accessible via the sylius.repository.product
service.
<?php
public function myAction(Request $request)
{
$repository = $this->container->get('sylius.repository.product');
}
Retrieving products is simple as calling proper methods on the repository.
<?php
public function myAction(Request $request)
{
$repository = $this->container->get('sylius.repository.product');
$product = $repository->find(4); // Get product with id 4, returns null if not found.
$product = $repository->findOneBy(array('slug' => 'my-super-product')); // Get one product by defined criteria.
$products = $repository->findAll(); // Load all the products!
$products = $repository->findBy(array('special' => true)); // Find products matching some custom criteria.
}
Product repository also supports paginating products. To create a Pagerfanta instance use the createPaginator
method.
<?php
public function myAction(Request $request)
{
$repository = $this->container->get('sylius.repository.product');
$products = $repository->createPaginator();
$products->setMaxPerPage(3);
$products->setCurrentPage($request->query->get('page', 1));
// Now you can return products to the template and iterate over it to get products from the current page.
}
The paginator also can be created for specific criteria and with desired sorting.
<?php
public function myAction(Request $request)
{
$repository = $this->container->get('sylius.repository.product');
$products = $repository->createPaginator(array('foo' => true), array('createdAt' => 'desc'));
$products->setMaxPerPage(3);
$products->setCurrentPage($request->query->get('page', 1));
}
2.2. Creating new product object¶
To create new product instance, you can simply call createNew()
method on the factory.
<?php
public function myAction(Request $request)
{
$factory = $this->container->get('sylius.factory.product');
$product = $factory->createNew();
}
Note
Creating a product via this factory method makes the code more testable, and allows you to change the product class easily.
2.3. Saving & removing product¶
To save or remove a product, you can use any ObjectManager
which manages Product. You can always access it via alias sylius.manager.product
.
But it’s also perfectly fine if you use doctrine.orm.entity_manager
or other appropriate manager service.
<?php
public function myAction(Request $request)
{
$factory = $this->container->get('sylius.factory.product');
$manager = $this->container->get('sylius.manager.product'); // Alias for appropriate doctrine manager service.
$product = $factory->createNew();
$product
->setName('Foo')
->setDescription('Nice product')
;
$manager->persist($product);
$manager->flush(); // Save changes in database.
}
To remove a product, you also use the manager.
<?php
public function myAction(Request $request)
{
$repository = $this->container->get('sylius.repository.product');
$manager = $this->container->get('sylius.manager.product');
$product = $repository->find(1);
$manager->remove($product);
$manager->flush(); // Save changes in database.
}
2.4. Properties¶
A product can also have a set of defined Properties (Attributes), you’ll learn about them in next chapter of this documentation.