Tôi muốn phổ biến cơ sở dữ liệu của mình bằng dữ liệu 'phẳng' được trích xuất từ một bảng excel. Tất cả các bản ghi được cung cấp dưới dạng mảng (tương tự như $ request-> data) nhưng có các khóa chính được đặt để giữ các giá trị. Mã của tôi:Bánh 3: Cách thêm thực thể mới vào cơ sở dữ liệu bằng bộ khóa chính?
$imported = 0;
foreach ($data as $record) {
$entity = $table->findOrCreate([$table->primaryKey() => $record[$table->primaryKey()]]);
$entity = $table->patchEntity($entity, $record);
if ($table->save($entity)) {
$imported++;
}
}
Mã hoạt động, nhưng tôi tự hỏi liệu có giải pháp nào tốt hơn không?
Để làm rõ: Những gì tôi muốn là thêm một cái gì đó giống như
[
['id' => 25, 'title'=>'some title'],
['id'=> 3, 'title' => 'some other title'],
['id' => 4356, 'title' => 'another title']
]
đến cơ sở dữ liệu rỗng của tôi. findOrCreate() thực hiện công việc. Nhưng tôi nghĩ rằng không cần thiết phải kiểm tra mọi bản ghi rằng nó chưa tồn tại trong cơ sở dữ liệu trước khi chèn.
sau khi đọc kỹ http://api.cakephp.org/3.0/class-Cake.ORM.Table.html#_findOrTạo Tôi hiểu rằng Ứng dụng đã lưu. Vì vậy, $ table-> findOrCreate ($ record) thực hiện công việc. Nhưng chỉ khi $ record ** không có khóa nào không có trong bảng **. – cewi
Vì vậy, đây chỉ là vấn đề được sử dụng với một cơ sở dữ liệu/bảng trống, nó sẽ không bao giờ cần thiết để cập nhật các bản ghi hiện có thay vì chèn các bản ghi mới? – ndm
có đó là những gì tôi đang cố gắng đạt được. Nếu không, tôi nghĩ findOrCreate() sẽ là đúng cách. – cewi