PHP code example of shlinkio / doctrine-specification
1. Go to this page and download the library: Download shlinkio/doctrine-specification library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?phprequire_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
shlinkio / doctrine-specification example snippets
// Not using the lib
$qb = $this->em->getRepository('HappyrRecruitmentBundle:Advert')
->createQueryBuilder('r');
return $qb->where('r.ended = 0')
->andWhere(
$qb->expr()->orX(
'r.endDate < :now',
$qb->expr()->andX(
'r.endDate IS NULL',
'r.startDate < :timeLimit'
)
)
)
->setParameter('now', new \DateTime())
->setParameter('timeLimit', new \DateTime('-4weeks'))
->getQuery()
->getResult();
// Using the lib
$spec = Spec::andX(
Spec::eq('ended', 0),
Spec::orX(
Spec::lt('endDate', new \DateTime()),
Spec::andX(
Spec::isNull('endDate'),
Spec::lt('startDate', new \DateTime('-4weeks'))
)
)
);
return$this->em->getRepository('HappyrRecruitmentBundle:Advert')->match($spec);
classAdvertsWeShouldCloseextendsBaseSpecification{
publicfunctiongetSpec(){
return Spec::andX(
Spec::eq('ended', 0),
Spec::orX(
Spec::lt('endDate', new \DateTime()),
Spec::andX(
Spec::isNull('endDate'),
Spec::lt('startDate', new \DateTime('-4weeks'))
)
)
);
}
}
classOwnedByCompanyextendsBaseSpecification{
private $companyId;
publicfunction__construct(Company $company, ?string $context = null){
parent::__construct($context);
$this->companyId = $company->getId();
}
publicfunctiongetSpec(){
return Spec::andX(
Spec::join('company', 'c'),
Spec::eq('id', $this->companyId, 'c')
);
}
}
classSomeService{
/**
* Fetch Adverts that we should close but only for a specific company
*/publicfunctionmyQuery(Company $company){
$spec = Spec::andX(
new AdvertsWeShouldClose(),
new OwnedByCompany($company)
);
return$this->em->getRepository('HappyrRecruitmentBundle:Advert')->match($spec);
}
}