Mysql
 sql >> база данни >  >> RDS >> Mysql

CakePHP Модел с Между датите

Ако ви следвам правилно:

  • Потребителят трябва да посочи начални/крайни дати за заявки за търсене, генерирани от формуляр
  • Трябва да потвърдите тези дати, така че например:
    • крайна дата след начална дата
    • крайна дата не е на векове от началната дата
  • Искате грешки при валидиране да се появяват вградени във формуляра (въпреки че това не е запис)

Тъй като искате да потвърдите тези дати, те ще бъдат по-трудни за хващане, когато са прибрани във вашия масив от условия. Предлагам да опитате да ги предадете отделно и след това да се справите с тях по-късно:

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

Надяваме се, че можете да се справите с всичко останало в beforeFind филтър:

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;
}

Не съм опитвал да използвам Model::invalidate() по време на операция за намиране, така че това може дори да не работи. Идеята е, че ако формулярът е създаден с помощта на FormHelper тези съобщения трябва да се върнат до полетата на формуляра.

Ако не успеете, може да се наложи да извършите тази проверка в контролера и да използвате Session::setFlash() . ако е така, можете също да се отървете от beforeFind и поставете BETWEEN масив от условия с другите ви условия.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вярно ли е, че броят на колоните не влияе върху производителността на базата данни, но броят на редовете влияе?

  2. Как да получите името на супервайзера вместо UserID + INNER JOIN в MYSQL

  3. Защо условието IN би било по-бавно от =в sql?

  4. MySQL Query, премахнете всички интервали

  5. Дзен количка:Бих искал да потърся от конкретна категория нейното име на продукти, цена, изображение, описание и атрибути