Lưu nhiều record với CakePHP
Đôi lúc bạn cần phải lưu nhiều record tại một thời điểm submit form, CakePHP hỗ trợ hàm saveAll() để làm việc này, ngoài ra, bạn có thể dùng vòng lặp kết hợp hàm save() tuy nhiên nếu dùng cách này bạn cần phải chú ý tới một chi tiết nho nhỏ nếu không dữ liệu sẽ không được lưu
Thay vì mỗi lần submit form chỉ lưu được 1 danh mục sản phẩm, bây giờ tôi sẽ thiết kế form để có thể lưu đồng thời nhiều danh mục một lúc. Đây là code phần view:
<?php $num_record = 5; echo $form->create(); for($i=1;$i<=$num_record;$i++) { echo $form->input('name',array('name'=>'data[ProductCategory][][name]','id'=>'id_'.$i)); } echo $form->end(array('label'=>'Lưu')); ?> |
Sau khi nhập thông tin, submit form, dữ liệu trả về có dạng như sau:
Array ( [ProductCategory] => Array ( [0] => Array ( [name] => Cat 1 ) [1] => Array ( [name] => Cat 2 ) [2] => Array ( [name] => Cat 3 ) [3] => Array ( [name] => Cat 4 ) [4] => Array ( [name] => Cat 5 ) ) ) |
1. Dùng saveAll()
saveAll($data = null, $options = array())
$data: dữ liệu cần lưu hoặc kiểm tra
$options: là mảng tùy chọn với 2 key quan trọng là validate và atomic
- validate:
+ false: không kiểm tra dữ liệu nhập vào
+ true: kiểm tra từng dòng dữ liệu trước khi lưu dòng đó
+ first: kiểm tra toàn bộ dữ liệu đưa vào trước khi lưu bất cứ dòng dữ liệu nào (mặc định)
+ only: chỉ kiểm tra dữ liệu, không lưu
- atomic:
+ true: lưu toàn bộ dữ liệu trong một transaction đơn (mặc định)
+ false: để false nếu CSDL không hỗ trợ transaction
Code trong controller:
function add() { if(!empty($this->data)) { $this->ProductCategory->saveAll($this->data['ProductCategory']); } } |
Kiểm tra lại bảng product_categories, dữ liệu đã được lưu vào!
2. Dùng vòng lặp kết hợp hàm save()
- Khi dùng vòng lặp, sau mỗi lần lặp bạn nhớ reset id của record về false, cụ thể trong trường hợp này là:
$this->ProductCategory->id = false; |
Code trong controller:
function add() { if(!empty($this->data)) { foreach($this->data['ProductCategory'] as $k=>$v){ $tmp['ProductCategory']['name'] = $v['name']; $this->ProductCategory->save($tmp); $this->ProductCategory->id = false; } } } |
4 Comments to “Lưu nhiều record với CakePHP”
Post comment
Bài viết mới
- CakePHP version 1.3.12
- Tạo chuỗi ngẫu nhiên với 1 dòng code
- Kỹ thuật “bit field” trong phân quyền
- Làm việc với File và Folder
- CakePHP 1.3.8
- CakePHP 1.3.7 Released
- Ajax trong CakePHP
- Tạo và load file config trong CakePHP
- Làm site đa ngôn ngữ với CakePHP (Phần 1)
- CakePHP 1.3.6 and 1.2.9 released
- CakePHP 1.3.5 released
- Type hinting trong PHP
- CakePHP ra phiên bản mới 1.3.4
- Tích hợp Zend framework vào CakePHP
- Tạo virtual host trên local
- Sử dụng Acl trong cakephp – Phần 2
- Sử dụng Acl trong cakephp – Phần 1
- Sinh code tự động với cake console
- Tự động xóa record ở bảng con khi reocord ở bảng cha bị xóa
- Xác thực người dùng với component Auth
Thảo luận mới
- admin on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- hanh on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng Acl trong cakephp – Phần 1
- admin on Sử dụng session trong CakePHP
- Bich Yen on Sử dụng session trong CakePHP
TAG
Calendar
Lưu trữ
- September 2011 (3)
- July 2011 (1)
- March 2011 (1)
- February 2011 (1)
- November 2010 (4)
- October 2010 (1)
- September 2010 (2)
- August 2010 (9)
- July 2010 (9)
- June 2010 (22)
Blogroll
- Bakery
- Biển đảo Việt Nam
- CakePHP
- CakePHP Google Group
- CakePHP Manual
- CakePHP Questions
- Diễn đàn CakePHP VN

admin

Mình muốn save 1 lúc 2 table thì làm sau bạn? Ví dụ: mình muốn save 5 products và cùng lúc đó save vào table ProductCategory 5 product đó (lấy 5 id của table products save vào table product_categories).
Không thể save cùng 1 lúc 2 table! Vẫn phải có cái save trước, cái save sau!
ProductCategory là cha của Product? Nếu vậy, tại sao bạn lại save id của Product vào ProductCategory? Mình không hiểu bạn thiết kế db chỗ này ra sao!
Có thể bạn muốn hỏi trường hợp này chăng:
- Làm cái form thêm ProductCategory, trên form đó đồng thời cho thêm nhiều Product, lưu cùng lúc ProductCategory và Product?
Nếu vậy, cách làm sẽ như sau:
- Save ProductCategory trước. Sau đó code:
để lấy ra id của ProductCategory mới thêm vào
- Cuối cùng là save Product với:
Cách save nhiều Product cùng lúc thì bạn xem bài trên. Nhớ đặt cái code lấy $category_id ra ngoài hàm for nhé!
Ý của mình là 1 product có thể nằm ở nhiều product_category. Mình làm dc rùi. Thanks.
Đây là code của mình:
Anh Tuyền ơi, em hỏi với thế mình edit nhiều record thì làm thế nào ạ. cái khó nhất là cái đoạn hiển thị dữ liệu để edit anh có thể làm 1 tut về edit đc ko nhỉ?