2009-11-18 4 views
1

Dans DBIx :: classe, quand je produis une requête en utilisant cette syntaxe:droite côté fonctions MySQL dans DBIx :: Class

... 
'Time(submitted_at)' => { '>' => 'Time(Now()-Interval ' . $wait_period . ' minute)' } 
... 

La requête générée est parfait, sauf pour le fait que la fonction de le côté droit est entre guillemets.

... AND (Time(submitted_at) > 'Time(Now()-Interval 5 minute)') ... 

S'il n'était pas cité, il serait correct. Comment ferais-je cela?

Merci, Rob

Répondre

4

passer la chaîne comme une référence scalaire à la place:

... 
'Time(submitted_at)' => \"> Time(Now()-Interval $wait_period minute)" 
... 
+0

Merci pour les réponses. Cependant, je n'arrive pas à comprendre pourquoi cela n'interprète pas les références de cette façon. Avec ce qui précède (pas du tout changé) je reçois ce SQL généré: ... (Time (submitted_at)> 'SCALAR (0x108b8cd8)') ... – rplevy

+0

Hmm, je suppose qu'il n'aime que les reflex scalaires au plus haut niveau du hachage. J'ai modifié ma réponse en conséquence, ça marche maintenant? –

+0

Yup Je l'ai compris tout à l'heure et c'était à propos du poteau, mais tu m'as battu dessus. Merci pour l'aide! – rplevy

5

Il seems que la façon de faire des expressions est de passer un ref scalaire ou ref tableau si vous souhaitez utiliser SQL littéral.

Voici un exemple montrant l'aide d'un paramètre de requête pour la variable $wait_period dans l'expression:

... 
'Time(submitted_at)' => { '>' => \['Time(Now()-Interval ? Minute)', $wait_period] } 
... 
+1

+1 pour l'utilisation d'un paramètre de requête plutôt que d'une concaténation de chaîne simple –

Questions connexes