This bundle allows to easy use DataLoaderPHP in your Symfony project through configuration.
This bundle allows to easy use DataLoaderPHP in your Symfony project by configuring it through configuration.
This library requires PHP >= 5.5 to work.
composer require overblog/dataloader-bundle
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
// ...
new Overblog\DataLoaderBundle\OverblogDataLoaderBundle(),
];
// ...
}
// ...
}
Here a fast example of how you can use the bundle
overblog_dataloader:
defaults:
# required
promise_adapter: "overblog_dataloader.react_promise_adapter"
# optional
factory: ~
options:
batch: true
cache: true
max_batch_size: ~
cache_map: "overblog_dataloader.cache_map"
cache_key_fn: ~
loaders:
users:
alias: "users_dataloader"
batch_load_fn: "@app.user:getUsers"
posts:
batch_load_fn: "Post::getPosts"
options:
max_batch_size: 15
batch: false
cache: false
cache_map: "app.cache.map"
cache_key_fn: "@app.cache"
images:
factory: my_factory
batch_load_fn: "Image\\Loader::get"
This example will create 3 loaders as services:
Here the list of existing promise adapters:
This bundle can be use with GraphQLBundle. Here an example:
#graphql
overblog_graphql:
definitions:
schema:
query: Query
services:
promise_adapter: "webonyx_graphql.sync_promise_adapter"
#dataloader
overblog_dataloader:
defaults:
promise_adapter: "overblog_dataloader.webonyx_graphql_sync_promise_adapter"
loaders:
ships:
alias: "ships_loader"
batch_load_fn: "@app.graph.ships_loader:all"
services:
app.graph.ship_repository:
class: AppBundle\Entity\Repository\ShipRepository
factory: ["@doctrine.orm.entity_manager", getRepository]
arguments:
- AppBundle\Entity\Ship
app.graph.ships_loader:
class: AppBundle\GraphQL\Loader\ShipLoader
arguments:
- "@overblog_graphql.promise_adapter"
- "@app.graph.ship_repository"
<?php
namespace AppBundle\GraphQL\Loader;
use AppBundle\Entity\Repository\ShipRepository;
use GraphQL\Executor\Promise\PromiseAdapter;
class ShipLoader
{
private $promiseAdapter;
private $repository;
public function __construct(PromiseAdapter $promiseAdapter, ShipRepository $repository)
{
$this->promiseAdapter = $promiseAdapter;
$this->repository = $repository;
}
public function all(array $shipsIDs)
{
$qb = $this->repository->createQueryBuilder('s');
$qb->add('where', $qb->expr()->in('s.id', ':ids'));
$qb->setParameter('ids', $shipsIDs);
$ships = $qb->getQuery()->getResult();
return $this->promiseAdapter->all($ships);
}
}
public function resolveShip($shipID)
{
$promise = $this->container->get('ships_loader')->load($shipID);
return $promise;
}
This is an example using the sync promise adapter of Webonyx.
Overblog/DataLoaderBundle is released under the MIT license.