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”