I started using CakePHP 3 days ago and I'm in middle of a spike solution right now. I'm learning it pretty quickly, but some of the functionality isn't clear in my head yet.
I was looking for some advice on how to proceed next.
I'm writing a search, where a user can enter data in numerous fields (10+) for a faculty member. They could enter relevant information, such as first name, last name, or departments / divisions, and these are all properly associated in the Model.
I'm looking to write a query that uses LIKE statements and perform the search. I was thinking about hacking away in the Faculty Model to start writing or extending off of a find function that can perform the search?
Is this the right approach? Should I be writing a custom function for a search? Is there another way to do this?
I've intentionally left out a lot of details about my project because I'm still learning the framework now, and want to hear the best options -- I don't want to be restricted by design. But basically, I have a form with several fields such as name, date of birth, memberships for faculty and I need a user to be able to enter information and search through my faculty.
If anyone could point me in right direction, it'd be greatly appreciated. I've been doing a lot of reading and I'm not sure how to proceed.
Thanks.
What I was trying to do is really simple. It's not an architectural question at all, I just needed to read up on Models and I answered my own question.
Specifically, I needed help with complex find conditions, and the CakePHP book has a section on that:
http://book.cakephp.org/view/1030/Complex-Find-Conditions#!/view/1030/Complex-Find-Conditions
There are lots of ways to handle this with Cake, but the good news is, you probably don't have to. There are lots of search add-ons for Cake that make this much easier to think about.
You may want to try Neil Crooke's "Searchable Plugin" for Cake.
Neil's plugin is pretty solid, and his post on the subject
This is how I handle searching. If you've just got a single textbox that can accept data for any field, instead of $this->data['Faculty'], loop through an array of the fields that you want to be able to search by.
foreach ($this->data['Faculty'] as $field => $value){
$conditions[$field . ' LIKE'] => '%' . $value . '%';
}
$results = $this->Faculty->find('all',
array(
'conditions'=>array('OR'=>$conditions), //or use AND here depending on need
)
);
$this->set('results',$results);