cuốn sách gpt4 ai đã làm

CakePHP: Chèn bản ghi có ID cụ thể

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 00:06:09 28 4
mua khóa gpt4 Nike

Điều này có liên quan đến CakePHP: Có thể chèn bản ghi với giá trị khóa chính được xác định trước không? Về cơ bản, cùng một câu hỏi. Trong CakePHP 1.2, tôi muốn chèn một bản ghi có ID được xác định trước. Giá trị của id được xác định bởi hệ thống bên ngoài, nhưng không giống như câu hỏi được liên kết, tôi không có quyền kiểm soát hệ thống đó nên không thể giải quyết vấn đề.

Nếu gọi $model->lưu() Cake sẽ luôn cố gắng cập nhật bản ghi khi trường id của mô hình được đặt. Nếu không có bản ghi nào có ID đó tồn tại, Cake thậm chí sẽ đặt ID thành SAI [1]:

hàm save($data = null, $validate = true, $fieldList = array()) {
// cắt
if (!$this->__exists && $count > 0) {
$this->id = false;
}
// cắt
}

Lưu mô hình trước rồi cập nhật id theo cách thủ công cũng không phải là một tùy chọn vì điều này sẽ phá vỡ tính toàn vẹn tham chiếu (đây là một hạn chế về kiến ​​​​trúc mà tôi cũng không kiểm soát được).

Vậy làm cách nào tôi có thể buộc CakePHP chèn bản ghi có khóa chính cụ thể?

Một số thông tin cơ bản về vấn đề tôi đang gặp phải:

Ứng dụng tôi đang làm việc được hỗ trợ bởi cơ sở dữ liệu Postgres, do đó khóa chính mới được xác định theo trình tự. Có một quá trình mà hệ thống bên ngoài sẽ CHỌN giá trị tiếp theo('my_model_sequence'), thực hiện một số công việc với id đó rồi chuyển nó tới ứng dụng CakePHP nơi tôi muốn CHÈN Bản ghi my_model có ID này.

Không thể gọi quy trình bên ngoài sau khi lưu bản ghi. Tôi cũng không có cách nào để sửa đổi quy trình bên ngoài cả.


[1] http://api12.cakephp.org/view_source/model/#l-1260

câu trả lời hay nhất

Nếu bạn muốn tạo bản ghi có id cụ thể, chỉ cần đảm bảo bạn điền vào trường id

   $this->data['ModelName']['id'] = $your_id;

Ngoài ra trước khi gọi:

    $this->save($this->data);

bạn nên nhớ gọi

$this->create();

Điều này sẽ đặt lại trạng thái mô hình cho phép bạn tạo bản ghi mới. Cuối cùng bạn nên thử:

   $this->ModelName->create(); 
$this->ModelName->save($this->data);

Mặt khác, khi tôi đọc bài đăng của bạn và cố gắng tưởng tượng cấu trúc bảng của bạn, tôi khuyên bạn nên cân nhắc việc giữ nguyên trường id và cố gắng đặt trường này làm khóa ngoại. Đây có phải là sự lựa chọn của bạn?

Về php - CakePHP: Chèn bản ghi có ID cụ thể, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/12563660/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress