Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Model CakePHP dengan Antar Tanggal

Jika saya mengikuti Anda dengan benar:

  • Pengguna harus menentukan tanggal mulai/berakhir untuk menemukan kueri yang dihasilkan dari formulir
  • Anda perlu memvalidasi tanggal ini, misalnya:
    • tanggal akhir setelah tanggal mulai
    • tanggal akhir tidak beberapa abad lagi dari tanggal mulai
  • Anda ingin kesalahan validasi muncul sebaris dalam formulir (meskipun ini bukan penyimpanan)

Karena Anda ingin memvalidasi tanggal-tanggal ini, tanggal-tanggal tersebut akan lebih sulit diperoleh ketika disimpan di dalam larik kondisi Anda. Saya sarankan untuk mencoba menyampaikan ini secara terpisah dan kemudian menanganinya nanti:

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

Semoga Anda dapat menangani semua hal lain di 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;
}

Saya belum mencoba menggunakan Model::invalidate() selama operasi pencarian, jadi ini mungkin tidak berhasil. Idenya adalah jika formulir dibuat menggunakan FormHelper pesan-pesan ini akan muncul kembali di sebelah kolom formulir.

Jika gagal, Anda mungkin perlu melakukan validasi ini di pengontrol dan menggunakan Session::setFlash() . jika demikian, Anda juga dapat menyingkirkan beforeFind dan letakkan BETWEEN array kondisi dengan kondisi Anda yang lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AngularJS | Cara Mengirim Data Json ke database di Codeigniter

  2. Manakah cara terbaik untuk mengunduh data awal basis data ke aplikasi iOS?

  3. Bagaimana cara mengatur character_set_database dan collation_database ke utf8 di my.ini?

  4. Mengembalikan semua baris dengan kondisi tertentu

  5. mysql_connect (localhost / 127.0.0.1) lambat pada platform Windows