pa-de-solminihac / clementine-framework-module-crud

0 stars 2 forks source link

revoir la gestion des clés étrangères #9

Open pa-de-solminihac opened 9 years ago

pa-de-solminihac commented 9 years ago

L'option autoload_foreign_keys_values ne sert pas à grand chose en l'état actuel des choses ; elle est encore moins utile si on ne définit pas de keys_labels dans la fonction _init :

        $this->metas['keys_labels'] = array(
            $this->table_groups . '.id' => $this->table_groups . '.group',
        );

Pour avoir un peu plus d'intérêt, il faudrait :

pa-de-solminihac commented 9 years ago

Pour le point 1 et la partie affichage du point 2, on pourrait revoir la partie chargement des clés étrangères ainsi :

// charge les valeurs pour les clés étrangères
$db = $this->getModel('db');
foreach ($this->_crud->fields as $tablefield => $fieldmeta) {
    if (isset($this->_crud->metas['foreign_keys'][$tablefield])) {
        list($ref_table, $ref_field) = explode('.', $this->_crud->metas['foreign_keys'][$tablefield]);
        if (!empty($this->_crud->metas['keys_labels'][$ref_table . '.' . $ref_field])) {
            $distincts = $db->distinct_values($ref_table, $ref_field, $this->_crud->metas['keys_labels'][$ref_table . '.' . $ref_field]);
            $this->setFieldValues($this->_crud->metas['keys_labels'][$ref_table . '.' . $ref_field], $distincts);
        } elseif ($this->getOption('autoload_foreign_keys_values')) {
            $distincts = $db->distinct_values($ref_table, $ref_field);
            $this->setFieldValues($tablefield, $distincts);
        }
    }
}

Code basé sur la version 5.6 : https://github.com/pa-de-solminihac/clementine-framework-module-crud/blob/5.6/ctrl/crudCrudController.php#L678