menggunakan cakephp’s beforeFind

I found out that on cakephp 1.2 RC3 you must use the new $Model->find() style or the query will break.

1
2
3
4
5
6
7
8
9
10
11
//in the controller use this...
$this->Post->find('first', $params);
 
//instead of the 'old' style...
$this->Post->find($conditions);
 
//so that in the model, you can do something like this...
function beforeFind($queryData) {
          $queryData['conditions']["`Post`.`post_type`"] = "personal";
          return($queryData);
}

Ada masanya kita perlu mengubah condition carian-carian kita pada satu-satu model. Selain meletakkan condition query itu setiap kali kita melakukan find, kita boleh menggunakan function callback pada model iaitu function beforeFind(). Ia menerima satu parameter iaitu $queryData, variable array yang menyimpan maklumat untuk find seperti ‘conditions’, ‘limit’, ‘joins’ dan sebagainya.

Tidak seperti tertera pada dokumentasi cakePHP, sebenarnya untuk beforeFind kita dapat memulangkan samada boolean (true/false) ataupun satu array . Jika kita memulangkan boolean, ia samada menjalankan query tersebut atau tidak: true untuk teruskan query, false untuk tidak membuat query.

Apa yang tidak disebut ialah jika kita mahu menukarkan apa2 pada syarat query itu, kita perlu buat perubahan pada $queryData dan pulangkan $queryData itu (return ($queryData)). Contoh…

1
2
3
4
5
6
7
/**
* ini contoh untuk menambahkan syarat pada find kita. Ini pada model AccomodationTravelBooking
**/
function beforeFind($queryData) {
     $queryData['conditions'][] = "`AccomodationTravelBooking.booking_type` = 'accomodation'";
     return($queryData);
}

Contoh diberi pada dokumentasi cakephp ialah jika kita tidak membenarkan query dilakukan mengikut syarat2 tertentu:

1
2
3
4
5
6
7
8
9
10
11
/**
* ini contoh untuk menambahkan syarat pada find kita. Ini pada model AccomodationTravelBooking
**/
function beforeFind($queryData) {
    //kononnya id 44 tu satu ID yang kita tak benarkan untuk diquery
    if($queryData['conditions']['AccomodationTravelBooking.id'] == 44) {
       return(false);
    }
 
    return(true);
 }

nota update: tak baca betul2, camtu la resultnya.

0 Responses to “menggunakan cakephp’s beforeFind”


  1. No Comments

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*
RSS for Posts RSS for Comments