Функция поиска, отображающая результаты по индексу в CakePHP

как я могу отобразить результаты моего запроса из функции поиска в представлении индекса? Судя по всему, поиск работает нормально, исходя из того, что отображается в нижней части торта по умолчанию. SELECT Movie.movie_id, Movie.title, Movie.date, Movie.description FROM cTrader.movies AS Movie WHERE Movie.date ‹= 20141118. Итак, мне было интересно, как отобразить все мои сообщения (фильмы) на основе поиска по дате в index.ctp Заранее спасибо, Андрей

ВИД:

<h1>Movies</h1>
<?php echo $this->Form->create('Movie', array('type' => 'get', 'action' => 'search'));?>
<?php echo $this->Form->input('date', array(
    'type'  => 'date',
    'label' => 'Date',
    'empty' => false,
    'dateFormat' => 'DMY',
    'minYear'=>'1990',
    'maxYear'=>date('Y'),
     ));  ?>

 <?php echo $this->Form->end(__('Submit')); ?> 
<table>
    <tr>
        <th>Title</th>
        <th>Year</th>
        <th>Description</th>
   </tr>
<?php foreach ($movies as $movie): ?>
    <tr>
        <td><?php echo $movie['Movie']['title'];?></td>
        <td><?php echo $movie['Movie']['date'];?></td>
        <td><?php echo $movie['Movie']['description'];?></td>
    </tr>
<?php endforeach; ?>
<?php unset($movie); ?>
</table>
<ul>
   <li><?php echo $this->Html->link(__('Insert a new movie'), array('controller' => 'movies', 'action' => 'add')); ?> </li>
</ul>

КОНТРОЛЛЕР

<?php
class MoviesController extends AppController {

public $helpers = array('Html', 'Form');

public function index() {
$this->set('movies', $this->Movie->find('all'));
}

    public function view($movie_id = null) {

        if (!$movie_id) {
            throw new NotFoundException(__('Invalid post'));
        }
        $movie = $this->Movie->findById($movie_id);
        if (!$movie) {
            throw new NotFoundException(__('Invalid post'));
        }
        $this->set('movie', $movie);
    }


public function search() {

 if (!isset($this->request->query['date'])) {
        throw new BadRequestException();
    }
    $result = $this->request->query['date']['year'] . $this->request->query['date']['month'] .     $this->request->query['date']['day'];
    $searchdate = array(
        'Movie.date <=' => $result,
        );
    $this->set('movies', $this->Movie->find('all', array('conditions' => $searchdate )));
    $this->view = 'index';
    }
   }
 ?>

person Andrew    schedule 18.11.2014    source источник
comment
Я бы не стал изобретать велосипед и просто использовал github.com/CakeDC/search, который делает именно это. но чистым СУХИМ способом.   -  person mark    schedule 18.11.2014
comment
Эндрю, можете ли вы точно определить проблему, с которой вы столкнулись, или где вы получаете ошибку??   -  person Supravat Mondal    schedule 19.11.2014
comment
Спасибо за ответ. @Supravat на самом деле функция отлично реагирует и соответственно обрабатывает ее. Однако моя проблема возникает после моего первого поиска. Например, я ищу свой первый фильм по дате, и он отображается, но когда я снова ищу, он отображает все мои записи, и это происходит, я думаю, потому что что-то нужно очистить. Что бы это было? Спасибо   -  person Andrew    schedule 19.11.2014


Ответы (1)


Измените форму на следующую

<h1>Movies</h1>
<?php echo $this->Form->create('Movie', array('type' => 'get', 'action' => 'index'));?>
<?php echo $this->Form->input('date', array(
    'type'  => 'date',
    'label' => 'Date',
    'empty' => false,
    'dateFormat' => 'DMY',
    'minYear'=>'1990',
    'maxYear'=>date('Y'),
     ));  ?>

 <?php echo $this->Form->end(__('Submit')); ?> 
<table>
    <tr>
        <th>Title</th>
        <th>Year</th>
        <th>Description</th>
   </tr>
<?php foreach ($movies as $movie): ?>
    <tr>
        <td><?php echo $movie['Movie']['title'];?></td>
        <td><?php echo $movie['Movie']['date'];?></td>
        <td><?php echo $movie['Movie']['description'];?></td>
    </tr>
<?php endforeach; ?>
<?php unset($movie); ?>
</table>
<ul>
   <li><?php echo $this->Html->link(__('Insert a new movie'), array('controller' => 'movies', 'action' => 'add')); ?> </li>
</ul>

И ваш контроллер к следующему.

<?php
   class MoviesController extends AppController {

  public $helpers = array('Html', 'Form');

  public function index() {
     if(isset($this->request->query['date']){
             $result = $this->request->query['date']['year'] . $this->request->query['date']['month'] .     $this->request->query['date']['day'];
              $searchdate = array(
             'Movie.date <=' => $result,
          );
         $this->set('movies', $this->Movie->find('all', array('conditions' => $searchdate )));
         $this->render = 'search';
     }
     else{
         $this->set('movies', $this->Movie->find('all'));
     }
  }

?>

person Nizam    schedule 20.11.2014