sql >> Database teknologi >  >> RDS >> Mysql

CakePHP Model med Mellem datoer

Hvis jeg følger dig rigtigt:

  • Brugeren skal angive start-/slutdatoer for søgeforespørgsler genereret fra en formular
  • Du skal validere disse datoer, så du f.eks.:
    • slutdato efter startdato
    • slutdato ikke århundreder væk fra startdato
  • Du ønsker, at valideringsfejl skal vises inline i formularen (selvom dette ikke er en lagring)

Da du ønsker at validere disse datoer, vil de være sværere at få fat i, når de er gemt væk inde i dit betingelser. Jeg foreslår, at du prøver at videregive disse separat og derefter behandle dem senere:

$this->Model->find('all', array(
    'conditions' => array(/* normal conditions here */),
    'dateRange' => array(
        'start' => /* start_date value */,
        'end'   => /* end_date value */,
    ),
));

Du skulle forhåbentlig være i stand til at håndtere alt andet i beforeFind filter:

public function beforeFind() {
    // perform query validation
    if ($queryData['dateRange']['end'] < $queryData['dateRange']['start']) {
        $this->invalidate(
            /* end_date field name */,
            "End date must be after start date"
        );
        return false;
    }
    /* repeat for other validation */
    // add between condition to query
    $queryData['conditions'][] = array(
        'Model.dateField BETWEEN ? AND ?' => array(
            $queryData['dateRange']['start'],
            $queryData['dateRange']['end'],
        ),
    );
    unset($queryData['dateRange']);
    // proceed with find
    return true;
}

Jeg har ikke prøvet at bruge Model::invalidate() under en søgeoperation, så det virker måske ikke engang. Ideen er, at hvis formularen er oprettet ved hjælp af FormHelper disse meddelelser skulle komme tilbage ved siden af ​​formularfelterne.

Hvis det ikke sker, skal du muligvis udføre denne validering i controlleren og bruge Session::setFlash() . hvis ja, kan du også slippe af med beforeFind og indsæt BETWEEN tilstand array sammen med dine andre betingelser.



  1. Sådan fungerer LOG() i MariaDB

  2. mysql resultset er altid null

  3. Flere relationer til den samme model CakePHP

  4. "Er det hemmeligt? Er det sikkert?" Håndtering af følsomme data i din datamodellering