mdunkle
mdunkle

Reputation: 1715

Search a specific database field with CakePHP post method

I’m trying to implement a simple search into an application, but not sure of the best way to handle this. My database contains a Listings object which includes City field. I want to create a search form where the user inputs a city into a text field and gets all of the Listings for that city on the next page. I don’t want to perform a full-text search, just the query on that City field.

Also, on the results page, I’d like to store the query in POST and can’t figure out the best way to do this.

What is the best way to approach this in the controller?

Upvotes: 0

Views: 2234

Answers (3)

Ayodeji Ayeni
Ayodeji Ayeni

Reputation: 1

View:

<?php echo $this->Form->create() 

echo $this->Form->input('search');

?>

<input name="data[Product][word]" />

controller:

<?php 

    $result = $this->Product->find('all',array(
        'conditions'=>array(
            'OR'=>array(
                array('name LIKE'=>'%'.$word.'%'),
                array('description LIKE'=>'%'.$word.'%'))))); 


    $this->set(compact('result'));

?>

Upvotes: 0

OldWest
OldWest

Reputation: 2385

This is a great tutorial with a CakePHP search plugin tutorial. You can download the full working code as well from github (w/ MySQL dump).

Upvotes: 0

JohnP
JohnP

Reputation: 50019

Well your view would look something like this

$this->Form->Create('Listing', array('action'=>'search'));
$this->Form->input('city', array('default'=>$city));
$this->Form->end();

if (isset($listings)) {
//code to display listings
}

This view would create the correct form. And your controller needs to get that value

function search() {
   $city = '';
   if (!empty($this->data)) {
      $city  = $this->data['Listing']['city'];
      $opts  = array(
          'conditions' => array('Listing.city' => $city)
      );
      $listings   = $this->Listing->find('all', $opts); 
      $this->set('listings', $listings);
   }
   $this->set('city', $city); // so the keyword is saved. Can also get it via $this->data
}

This code should give you an idea on how to do this.

Upvotes: 1

Related Questions