Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mô hình CakePHP với Giữa các ngày

Nếu tôi đang theo dõi bạn một cách chính xác:

  • Người dùng phải chỉ định ngày bắt đầu / ngày kết thúc cho các truy vấn tìm được tạo từ biểu mẫu
  • Bạn cần xác thực những ngày này để, ví dụ:
    • ngày kết thúc sau ngày bắt đầu
    • ngày kết thúc không cách ngày bắt đầu hàng thế kỷ
  • Bạn muốn các lỗi xác thực xuất hiện nội dòng trong biểu mẫu (mặc dù đây không phải là bản lưu)

Vì bạn muốn xác thực những ngày này, chúng sẽ khó lấy hơn khi chúng được giấu bên trong mảng điều kiện của bạn. Tôi khuyên bạn nên thử chuyển những điều này vào một cách riêng biệt và sau đó xử lý chúng sau:

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

Hy vọng rằng bạn có thể xử lý mọi thứ khác trong beforeFind bộ lọc:

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

Tôi chưa thử sử dụng Model::invalidate() trong một hoạt động tìm kiếm, vì vậy điều này thậm chí có thể không hoạt động. Ý tưởng là nếu biểu mẫu được tạo bằng FormHelper những thông báo này sẽ trở lại bên cạnh các trường biểu mẫu.

Nếu không, bạn có thể cần thực hiện xác thực này trong bộ điều khiển và sử dụng Session::setFlash() . nếu vậy, bạn cũng có thể loại bỏ beforeFind và đặt BETWEEN mảng điều kiện trong với các điều kiện khác của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xóa một cột khỏi bảng trong MySQL

  2. Bắt đầu nhanh di chuyển cơ sở dữ liệu bằng Talend

  3. CakePHP 3:Thực hành tốt nhất cho bảng SQL tạm thời

  4. Chọn phân vị thứ n từ MySQL

  5. Lỗi MySQL:Kích thước cột tối đa là 767 byte