/** * Gets the translations for the resources and their associated ids. * * @param array $resources * @return Collection */ public function getTranslations(array $resources) { $resourceCriteria = new ResourceCriteria(); foreach ($resources as $resource => $ids) { $resourceCriteria->addResource($resource); foreach ($ids as $id) { $resourceCriteria->addId($resource, $id); } } return $this->translationRepository->getByResourceCriteria($resourceCriteria); }
/** * When searching for translations to be applied to an entity, or a collection of entities, * we want to do so in the most manner possible. In this way, any repository you have * that searches for translations, should do so based on the ResourceCriteria object passed. * * @param ResourceCriteria $criteria * @return mixed */ public function getByResourceCriteria(ResourceCriteria $criteria) { $resources = $criteria->getResources(); $query = $this->getQuery(); foreach ($resources as $resource) { $query->orWhere(function ($query) use($criteria, $resource) { $query->whereResource($resource); $query->whereIn('foreignId', $criteria->getIds($resource)); }); } return $query->get(); }
public function testResourceCriteriaSearch() { $resourceCriteria = new ResourceCriteria(); $resourceCriteria->addResource('Content'); $resourceCriteria->addId('Content', 1); $translations = $this->translationRepository->getByResourceCriteria($resourceCriteria); $this->assertCount(2, $translations); $this->assertEquals('This is how you spell colour.', $translations[0]->value); $this->assertEquals('en_GB', $translations[0]->language); $this->assertEquals('This is how you spell color.', $translations[1]->value); $this->assertEquals('en_US', $translations[1]->language); }
/** * When searching for translations to be applied to an entity, or a collection of entities, * we want to do so in the most manner possible. In this way, any repository you have * that searches for translations, should do so based on the ResourceCriteria object passed. * * @param ResourceCriteria $criteria * @return mixed */ public function getByResourceCriteria(ResourceCriteria $criteria) { // Resources provided may be empty, in which case - no translations should be searched for if ($criteria->invalid()) { return new Collection(); } $resources = $criteria->getResources(); $query = $this->model->select(['*']); foreach ($resources as $resource) { $query->orWhere(function ($query) use($criteria, $resource) { $query->whereResource($resource); $query->whereIn('foreign_id', $criteria->getIds($resource)); }); } return $query->get(); }