2017-03-16 5 views
1

Ich versuche, die Zeile aus Tabelle Berechtigungen abrufen, wo das aktuelle Datum zwischen den beiden Feldern date_from und date_to vorhanden ist. hier ist die SQL-Abfrage:mysql zwischen Anweisung in CakePHP

SELECT * FROM `allowances` WHERE desg_id=4 AND CURDATE() between date_from and date_to 

jetzt, wie diese Abfrage in cakephp2 Fund zu schreiben. Ich versuche dies:

$allowance = $this-> Allowance->find('all',array(
'conditions'=>array(
'? BETWEEN ? AND ?'=>array(date('Y-m-d'), 'Allowance.date_from', 'Allowance.date_to') 
))); 

Ich habe die SQL-Ausgabe:

SELECT `Allowance`.`id`, `Allowance`.`date_from`, `Allowance`.`date_to`, FROM `db_demo`.`allowances` WHERE '2017-03-16' BETWEEN 'Allowance.date_from' AND 'Allowance.date_to' 

hier ist das Problem mit Anführungszeichen. Leider funktioniert es nicht.Was ist falsch mit dieser Abfrage.

+0

Was ist Ihr "date_from" und "date_to" -Feldtyp "datetime" oder "date"? – Mustafa

+0

Mögliches Duplikat http://stackoverflow.com/questions/26430259/cakephp-3-0-between-find-condition – Mustafa

+0

Feld Typ Datum –

Antwort

1

können Sie auf diese Weise versuchen:

$this->Order->find('all', array(
    'conditions' => array(
     'id' => $id, 
     'created >=' => $start_date, 
     'created <=' => $end_date . ' 23:59:59', 
     'my_field LIKE' => '%whatever%' 
)); 
+0

was ist das ???? –

1

Sie keine Bezeichner auf diese Weise binden können, als gebundener Strings als Stringliterale enden, wie in der generierten Abfrage zu sehen ist. Entweder fügen Sie die Kennungen in der SQL-Schnipsel auf der linken Seite der Bedingung:

'? BETWEEN Allowance.date_from AND Allowance.date_to' => date('Y-m-d') 

oder Ausdrücke verwenden (was den Aufwand aber nicht wirklich wert ist):

$dataSource = $this->Allowance->getDataSource(); 

// ... 

'? BETWEEN ? AND ?' => array(
    date('Y-m-d'), 
    // note that using expressions is unsafe for user input! 
    $dataSource->expression('Allowance.date_from'), 
    $dataSource->expression('Allowance.date_to') 
) 

Siehe auch