Ngu ngơ học làm web (x16) - CakePHP2 - Search trên một table

Tiếp theo của: Ngu ngơ học làm web (x15) - CakePHP2 – counterCache
-----

Phần x16. CakePHP2 – Search trên một table


Xem (clip số 22a – chickenrainshop):

- Tạo form tìm kiếm bằng html helper, liên kết đến một model

- Kiểm tra request có phải là post không? (2":56)

- Xem dữ liệu bằng hàm pr()(3":04)

- Truy vấn tìm kiếm tương đối (6":19)

- Kiểm tra một biến có rỗng hay không empty() (7":45)

- Kiểm tra biến có tồn tại hay không isset() (8":33)

Để ý thứ tự khi viết một chức năng mới:

- Vào controller viết hàm xử lý, chỉ cần tên hàm thôi, chưa xử lý gì bên trong

- Vào view viết mã cho giao diện

- Vào lại controller viết tiếp các xử lý khi người dùng gửi dữ liệu về server

Hai cách viết để sử dụng contain dưới đây là như nhau:

- Cách một:

'contain' => ['Writer.name', 'Writer.slug']

- Cách hai:

'contain' => ['Writer' => ['name', 'slug']]

Câu truy vấn tìm kiếm tương đối (like):

Ví dụ,

$books = $this->Book->find('all',
                                                [
                                                            'fields' => ['title', 'image', 'sale_price', 'slug'],
                                                            // 'contain' => ['Writer.name', 'Writer.slug'],
                                                            'contain' => ['Writer' => ['name', 'slug']],
                                                            'order' => ['Book.created' => 'desc'],
                                                            'conditions' => [
                                                                        'published' => 1,
                                                                        'title like' => '%'.$keyword.'%'
                                                                        ]
                                                ]);

Ghi lại một số đoạn mã để tham khảo:

[hàm search() trong BooksController.php]

public function search() {
                        $notFound = false;
                        if ($this->request->is('post')) {
                                    $keyword = $this->request->data['Book']['keyword'];
                                    $books = $this->Book->find('all',
                                                [
                                                            'fields' => ['title', 'image', 'sale_price', 'slug'],
                                                            // 'contain' => ['Writer.name', 'Writer.slug'],
                                                            'contain' => ['Writer' => ['name', 'slug']],
                                                            'order' => ['Book.created' => 'desc'],
                                                            'conditions' => [
                                                                        'published' => 1,
                                                                        'title like' => '%'.$keyword.'%'
                                                                        ]
                                                ]);
                                    if (!empty($books)) {
                                                $this->set('results', $books);
                                    } else {
                                                $notFound = true;
                                    }
                        }
                        $this->set('notFound', $notFound);
            }

[View\Books\search.ctp]

<?php echo $this->Form->create('Book'); ?>
            <?php echo $this->Form->input('keyword',
                        [
                                    'label' => '',
                                    'placeholder' => 'Nhập từ khóa tìm kiếm...'
                        ]);
            ?>
            <?php if(isset($results) && $notFound == false): ?>
                        <?php echo $this->element('book', ['books' => $results]); ?>
            <?php elseif($notFound == true): ?>
                        Không tìm thấy quyển sách này!
            <?php endif ?>

<?php echo $this->Form->end('Search'); ?>
-----------
Cập nhật 14/5/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web