chg: [metaTemplates:computeConflicts] Usage of subqueries instead of array of IDs

pull/93/head
Sami Mokaddem 2022-03-01 11:32:30 +01:00
parent 134b7bfc3e
commit a78864912e
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
1 changed files with 29 additions and 34 deletions

View File

@ -992,7 +992,7 @@ class MetaTemplatesTable extends AppTable
* @param array $templateField * @param array $templateField
* @return array * @return array
*/ */
public function computeExistingMetaTemplateFieldConflictForMetaTemplateField(\App\Model\Entity\MetaTemplateField $metaTemplateField, array $templateField): array public function computeExistingMetaTemplateFieldConflictForMetaTemplateField(\App\Model\Entity\MetaTemplateField $metaTemplateField, array $templateField, string $scope): array
{ {
$result = [ $result = [
'automatically-updateable' => true, 'automatically-updateable' => true,
@ -1021,22 +1021,18 @@ class MetaTemplatesTable extends AppTable
} }
} }
if (!empty($templateField['regex']) && $templateField['regex'] != $metaTemplateField->regex) { if (!empty($templateField['regex']) && $templateField['regex'] != $metaTemplateField->regex) {
$query = $this->MetaTemplateFields->MetaFields->find(); $entitiesWithMetaFieldQuery = $this->MetaTemplateFields->MetaFields->find();
$query $entitiesWithMetaFieldQuery
->enableHydration(false) ->enableHydration(false)
->select([ ->select([
'parent_id', 'parent_id',
'scope',
'meta_template_field_id',
]) ])
->where([ ->where([
'meta_template_field_id' => $metaTemplateField->id, 'meta_template_field_id' => $metaTemplateField->id,
]); ]);
$entitiesWithMetaField = $query->all()->toList(); $entitiesTable = $this->getTableForMetaTemplateScope($scope);
if (!empty($entitiesWithMetaField)) {
$entitiesTable = $this->getTableForMetaTemplateScope($entitiesWithMetaField[0]['scope']);
$entities = $entitiesTable->find() $entities = $entitiesTable->find()
->where(['id IN' => Hash::extract($entitiesWithMetaField, '{n}.parent_id')]) ->where(['id IN' => $entitiesWithMetaFieldQuery])
->contain([ ->contain([
'MetaFields' => [ 'MetaFields' => [
'conditions' => [ 'conditions' => [
@ -1062,8 +1058,7 @@ class MetaTemplatesTable extends AppTable
if (!empty($conflictingEntities)) { if (!empty($conflictingEntities)) {
$result['automatically-updateable'] = $result['automatically-updateable'] && false; $result['automatically-updateable'] = $result['automatically-updateable'] && false;
$result['conflicts'][] = __('This field is instantiated with values not passing the validation anymore'); $result['conflicts'][] = __('This field is instantiated with values not passing the validation anymore');
$result['conflictingEntities'] = $conflictingEntities; $result['conflictingEntities'] = array_merge($result['conflictingEntities'], $conflictingEntities);
}
} }
} }
return $result; return $result;
@ -1091,7 +1086,7 @@ class MetaTemplatesTable extends AppTable
if ($newMetaField['field'] == $metaField->field) { if ($newMetaField['field'] == $metaField->field) {
unset($existingMetaTemplateFields[$metaField->field]); unset($existingMetaTemplateFields[$metaField->field]);
$metaFieldArray = !is_array($newMetaField) && get_class($newMetaField) == 'App\Model\Entity\MetaTemplateField' ? $newMetaField->toArray() : $newMetaField; $metaFieldArray = !is_array($newMetaField) && get_class($newMetaField) == 'App\Model\Entity\MetaTemplateField' ? $newMetaField->toArray() : $newMetaField;
$templateConflictsForMetaField = $this->computeExistingMetaTemplateFieldConflictForMetaTemplateField($metaField, $metaFieldArray); $templateConflictsForMetaField = $this->computeExistingMetaTemplateFieldConflictForMetaTemplateField($metaField, $metaFieldArray, $metaTemplate->scope);
if (!$templateConflictsForMetaField['automatically-updateable']) { if (!$templateConflictsForMetaField['automatically-updateable']) {
$conflicts[$metaField->field] = $templateConflictsForMetaField; $conflicts[$metaField->field] = $templateConflictsForMetaField;
$conflicts[$metaField->field]['existing_meta_template_field'] = $metaField; $conflicts[$metaField->field]['existing_meta_template_field'] = $metaField;