2010-09-16 6 views
8

J'essaie d'obtenir une requête de base de données qui est un objet converti en un tableau associatif, afin que je puisse l'utiliser dans la classe de calendrier dans le codeigniter.Conversion d'un objet de résultat Mysql en tableau associatif (CodeIgniter)

Ceci est mon modèle:

<?php 

class Get_diary_model extends Model { 

    function getAllDiaries($year,$month) { 

     $data = $this->db->query("SELECT day AND entry FROM diary WHERE month=$month AND year=$year"); // the entries for the relevant month and year 

     foreach($data->result_array() as $row) { // return result as assoc array to use in calendar 
      echo $row['day']; 
      echo $row['entry']; 
     } 

     return $data; 
     } 
    } 

et ceci est l'erreur que je reçois:

atal error: Cannot use object of type CI_DB_mysql_result as array in C:\wamp\www\mm\system\libraries\Calendar.php on line 219 

Toutes les idées?

Répondre

6

Vérifiez òû ce tutoriel vidéo, il vous aidera ->http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-the-calendar-library/

Votre modèle devrait ressembler à ceci:

function getAllDiaries($year,$month) 
    { 
     $q = $this->db->query("SELECT day AND entry FROM diary WHERE month=$month AND year=$year"); 

     if($q->num_rows() > 0): 
      foreach($q->result() as $row): 
       $data[] = $row; 
      endforeach; 
      return $data; 
     else: 
      return false; 
     endif; 
    } 

et votre contrôleur:

function index($year = null, $month = null) 
    { 
     $this->load->model('Get_diary_model'); 

     if (!$year) { 
      $year = date('Y'); 
     } 
     if (!$month) { 
      $month = date('m'); 
     } 

     $data['calendar'] = $this->Get_diary_model->getAllDiaries($year, $month); 
} 
+0

Parfait! Merci beaucoup, mon contrôleur est similaire à cela, je ne pouvais pas comprendre la partie du modèle. Va vérifier la vidéo ainsi ... – Robimp

+0

vous êtes les bienvenus :) – Christophe

+0

vous pouvez voter aussi ma réponse :) – Christophe

3

Le problème n'a pas été Dans votre utilisation de result_array(), plus vous retournez $ data directement. $ query = $ this-> db-> query() puis utilisez $ query-> result_array() dans foreach. Ensuite, vous pouvez renvoyer $ data après l'avoir construit dans foreach.

L'autre réponse est un moyen de longue haleine d'écrire ce qui suit:

function getAllDiaries($year,$month) 
{ 
    $sql = "SELECT day AND entry FROM diary WHERE month=$month AND year=$year"; 
    return $this->db->query($sql)->result(); 
} 

Mais bien sûr, qui retourne un tableau d'objets, pas un tableau multidimensionnel.

+0

Salut Phil merci pour la réponse, j'ai donné ça essayez mais ça ne fait pas tout à fait ce que je veux.J'essaie d'obtenir le champ 'day' de la base de données pour être la clé du tableau, et l'entrée ' ' la valeur. Jusqu'à présent, pas de chance. – Robimp

+0

var_dump() est la réponse ici. Chaque fois que vous obtenez un résultat inattendu, var_dump(), voyez ce qu'il y a et agissez en conséquence. Pour obtenir un tableau assoc vous utilisez la syntaxe correcte. C'est quelque chose dans votre foreach ou la manipulation de tableau plus tard qui va mal. –

1

utilisation ci-dessous méthode simple,

$query = $this->db->get_where('table', array('table_id' => $id)); 

     $queryArr = $query->result();   

     foreach ($queryArr[0] as $key=>$val) 
     { 
      $row[$key]=$val; 
     } 

print_r($row); //this will give associative array 
1

Voici la solution pour CodeIgniter-3

function getAllDiaries(){ 
    $query = $this->db->query("YOUR QUERY HERE"); 
    return $query->result('array'); 
} 

OU

function getAllDiaries(){ 
    return $this->db->query("YOUR QUERY HERE")->result('array'); 
} 

Remarque: la fonction résultat() accepter « tableau "ou" objet "en tant que paramètre. La valeur par défaut est "objet"

Questions connexes