fix: [component:CRUDComponent] Take data linked to the current table

Performs a query similar to a right join instead of dumping the table for composed contextual filters
pull/37/head
mokaddem 2021-01-14 15:30:16 +01:00
parent 93f1467d5e
commit 6685838308
1 changed files with 9 additions and 4 deletions

View File

@ -394,8 +394,13 @@ class CRUDComponent extends Component
foreach ($contextFilters['fields'] as $field) {
$contextsFromField = $this->getFilteringContextFromField($field);
foreach ($contextsFromField as $contextFromField) {
if (is_bool($contextFromField)) {
$contextFromFieldText = sprintf('%s: %s', $field, $contextFromField ? 'true' : 'false');
} else {
$contextFromFieldText = $contextFromField;
}
$filteringContexts[] = [
'label' => Inflector::humanize($contextFromField),
'label' => Inflector::humanize($contextFromFieldText),
'filterCondition' => [
$field => $contextFromField
]
@ -496,9 +501,9 @@ class CRUDComponent extends Component
if (count($exploded) > 1) {
$model = $exploded[0];
$subField = $exploded[1];
return $this->Table->{$model}->find()
->distinct([$subField])
->extract($subField)->toList();
$fieldToExtract = sprintf('%s.%s', Inflector::singularize(strtolower($model)), $subField);
$query = $this->Table->find()->contain($model)->distinct($field);
return $query->all()->extract($fieldToExtract)->toList();
} else {
return $this->Table->find()->distinct([$field])->all()->extract($field)->toList();
}