-----
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
-----------