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.
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
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
Ouais, le mécanisme d'échappement du dossier actif de CI est vraiment un PIA parfois :) – Bogdan