2010-07-12 4 views
1

J'ai un modèle CI mis en place avec cette fonction et ActiveRecord:CodeIgniter MySQL Requête ne renvoyant aucune donnée, même s'il y a définitivement des données à retourner!

function get_open_competitions() 
{          
    $this->db->select('*, TO_DAYS(closingdate) - TO_DAYS(CURDATE()) AS days') 
       ->from('challenges') 
       ->where('closingdate >','CURDATE()') 
       ->order_by('days','asc'); 

    $query = $this->db->get();   
    return $query; 
} 

Je suis 99,9% que courraient cette requête:

SELECT *, TO_DAYS(closingdate) - TO_DAYS(CURDATE()) AS days 
FROM challenges 
WHERE closingdate > CURDATE() 
ORDER BY days ASC 

Quand je mets cette requête simple par phpMyAdmin ou Sequel Pro, renvoie 5 lignes - comme prévu - de la base de données. Cependant quand je l'appelle dans le contrôleur challenges le code suivant:

function index() 
{ 
    // Fetch the Open for Entry competitions 
    $data['open'] = $this->cm->get_open_competitions(); 
    // Fetch the Open for Voting competitions 
    $data['voting'] = $this->cm->get_voting_competitions(); 
    // Fetch the Ended Competitions 
    $data['ended'] = $this->cm->get_ended_competitions(); 

    $data['colwide'] = 'challenges/challengeshome'; 
    $this->load->view('templatewide',$data); 
} 

... Et puis dans le fichier de vue l'appeler comme ça ...

<h2>Open for Entry</h2> 

<hr/> 

<?php foreach ($open->result() as $row) { ?> 
    <h3> 
     <?php echo anchor('challenges/view/'.$row->id, $row->title);?> - 
     <i>Challenge ends and voting begins in <?php echo $row->days;?> days</i> 
    </h3> 
    <h4> <?php echo $row->description;?> </h4> 
<?php } ?> 

... rien est sortie!

Cela me déroutant, parce que je suis très certain que j'ai une requête valide, et j'ai également deux autres fonctions de modèle - get_ended_competitions et get_voting_competitions - tous deux que je utilise à côté de ce qui fonctionnent très bien. Le code n'est définitivement pas différent.

Qu'est-ce que je fais de mal ?! : S

Merci!

Jack

Edit: Rien est écrit dans le journal soit CodeIgniter, ou le journal des erreurs de PHP.

Répondre

1

Avant toute chose, activez le profileur dans votre constructeur de contrôleur:

$this->output->enable_profiler(true); 

cette façon, vous verrez exactement ce que les requêtes sont générées.

LE: aussi, ne pas oublier $this->db->last_query();;)

+0

Merci de me rappeler le Générateur de profils. Il suffit de lancer ses requêtes via la base de données - le problème est que ActiveRecord place des 'guillemets' autour de CURDATE() pour qu'il soit traité comme du texte au lieu d'une fonction MySQL! Connaissez-vous un moyen de contourner cela? – Jack

+0

J'ai compris. Le troisième paramètre de '$ this-> db-> where()', lorsqu'il est défini sur FALSE, n'ajoutera pas de retour arrière. Merci Bogdan! – Jack

+0

Ouais, le mécanisme d'échappement du dossier actif de CI est vraiment un PIA parfois :) – Bogdan

Questions connexes