Karim's Blog

Un peu de tout sur CSS, HTML, AngularJS, JavaScript, Php et le reste

Codeigniter : Utiliser plusieurs bases de données

Vous avez celle par défaut, dans votre fichier de configuration et vous pourrez ajouter d'autres bases de données selon vos besoins.

La manoeuvre n'est pas difficile à mettre en place et commence par le fichier de configuration database.php dans le dossier application.

Modification du fichier database.php

Nous allons commencer, par modifier ce fichier, pour renseigner les données de nos bases.


 
  1. <?php
  2.  
  3. /***************************/
  4. $active_group = 'default';
  5. $active_record = TRUE;
  6.  
  7. $db['default']['hostname'] = 'localhost';
  8. $db['default']['username'] = 'root';
  9. $db['default']['password'] = '';
  10. $db['default']['database'] = 'base1';
  11. $db['default']['dbdriver'] = 'mysql';
  12. $db['default']['dbprefix'] = '';
  13. $db['default']['pconnect'] = TRUE;
  14. $db['default']['db_debug'] = TRUE;
  15. $db['default']['cache_on'] = FALSE;
  16. $db['default']['cachedir'] = '';
  17. $db['default']['char_set'] = 'utf8';
  18. $db['default']['dbcollat'] = 'utf8_general_ci';
  19. $db['default']['swap_pre'] = '';
  20. $db['default']['autoinit'] = TRUE;
  21. $db['default']['stricton'] = FALSE;
  22.  
  23. /******************************/
  24.  
  25. $active_group = 'test';
  26. $active_record = TRUE;
  27.  
  28. $db['test']['hostname'] = 'localhost';
  29. $db['test']['username'] = 'root';
  30. $db['test']['password'] = '';
  31. $db['test']['database'] = 'base2';
  32. $db['test']['dbdriver'] = 'mysql';
  33. $db['test']['dbprefix'] = '';
  34. $db['test']['pconnect'] = TRUE;
  35. $db['test']['db_debug'] = TRUE;
  36. $db['test']['cache_on'] = FALSE;
  37. $db['test']['cachedir'] = '';
  38. $db['test']['char_set'] = 'utf8';
  39. $db['test']['dbcollat'] = 'utf8_general_ci';
  40. $db['test']['swap_pre'] = '';
  41. $db['test']['autoinit'] = TRUE;
  42. $db['test']['stricton'] = FALSE;
  43.  
  44. ?>

Ici, nous avons deux bases de données nommées base1 et base2. Si vous regardez bien, on remarque que la valeur 'active_group'  est utilisée par toutes les autres données comme premier paramètre. C'est justement cette information qui permet de distinguer chaque base de donnée et de pouvoir insérer, modifier, supprimer dans la base correspondante.

Modèle de donnée

Dans notre fichier model, nous allons spécifier toutes nos requêtes.


 
  1. <?php
  2.  
  3. if (!defined('BASEPATH'))
  4. exit('No direct script access allowed');
  5.  
  6. class Menu2_model extends CI_Model {
  7.  
  8. protected $table = 'menu';
  9.  
  10. function __construct() {
  11. parent::__construct();
  12. $this->load->database('test', TRUE);
  13. }
  14.  
  15. public function display_menu()
  16. {
  17. return $this->db->select('nom_menu')
  18. ->order_by("id_menu", "desc")
  19. ->get($this->table);
  20.  
  21. }
  22.  
  23. }
  24.  
  25. ?>

Dans le constructeur, nous avons indiqué la base de donnée à utiliser. Elle sera effective pour l'ensemble des requêtes qui seront définies dans ce fichier.


 
  1. <?php
  2.  
  3. if (!defined('BASEPATH'))
  4. exit('No direct script access allowed');
  5.  
  6. class Menu1_model extends CI_Model {
  7.  
  8. protected $table = 'menu';
  9.  
  10. function __construct() {
  11. parent::__construct();
  12. $this->load->database('default', TRUE);
  13. }
  14.  
  15. public function display_menu()
  16. {
  17. return $this->db->select('nom_menu')
  18. ->order_by("id_menu", "desc")
  19. ->get($this->table);
  20. }
  21.  
  22. }
  23.  
  24. ?>

Pour l'exemple , on souhaite afficher les données du menu des deux bases de données.

Le contrôleur


 
  1. <?php
  2.  
  3. if (!defined('BASEPATH'))
  4. exit('No direct script access allowed');
  5.  
  6. class front extends CI_Controller {
  7.  
  8. function __construct() {
  9. parent::__construct();
  10. }
  11.  
  12. public function index() {
  13.  
  14. $data['base1'] = $this->menu1_model->display_menu();
  15. $data['base2'] = $this->menu2_model->display_menu();
  16.  
  17. $this->load->view('accueil',$data);
  18.  
  19. }
  20.  
  21. ?>

Dans le contrôleur, on récupère les données, par les méthodes que nous avons définies dans nos modéles. Afin de pouvoir les afficher dans notre vue, on a ajouté un deuxième paramètre,$data qui contient les résultats des requêtes.

La vue


 
  1. <div class="title">
  2. <h3>Accueil</h3>
  3. </div>
  4.  
  5. <div id='menu_base1'>
  6. <?php
  7. $rows = $base1->result_array();
  8. foreach ($rows as $key => $value) {
  9. echo $value['nom_menu'];
  10. }
  11. ?>
  12. </div>
  13.  
  14. <div id='menu_base2'>
  15. <?php
  16. $rows = $base2->result_array();
  17. foreach ($rows as $key => $value) {
  18. echo $value['nom_menu'];
  19. }
  20. ?>
  21. </div>
  22.  
  23. ?>

Conclusion

Voilà, vous savez utiliser plusieurs bases de données et vous pouvez travailler avec les données de celles-ci.