Tôi có một ứng dụng web hiện có mà tôi đang chuyển đổi để sử dụng CakePHP. Vấn đề là các khóa chính cho hầu hết các bảng có định dạng này "$ {table_name} _id" (story_id) thay vì cách CakePHP của 'id'CakePHP Lưu với một bảng mà khóa chính không phải là 'id'
Khi nào tôi cố gắng cập nhật một số trường đối với một hàng trong bảng câu chuyện, hàm Save() sẽ trả về false. Có cách nào để nhận được báo cáo lỗi chi tiết hơn từ hàm Save() không. ?
Khi tôi đặt Configure::write('debug', 2);
trong core.php
và kiểm tra câu lệnh SQL Tôi không thấy bất kỳ lệnh UPDATE nào, chỉ có câu lệnh SELECT.
Tôi đã cố chỉnh sửa bộ điều khiển thêm dòng sau để đặt thủ công trường id cho bộ điều khiển nhưng không giúp được.
$this->Story->id = $this->data['Story']['story_id'] ;
Tôi đang hết ý tưởng. Bất kỳ đề xuất?
Tôi đã bao gồm mã nguồn mà tôi đang sử dụng dưới điều khiển
Story: mô hình
function admin_edit($id = null)
{
if (!$id && empty($this->data)) {
$this->Session->setFlash(__('Invalid '. Configure::read('Site.media') , true));
$this->redirect(array('action'=>'index'));
}
$this->layout = 'admin';
if (!empty($this->data)) {
if ($this->Story->save($this->data)) {
$this->Session->setFlash(__('The '. Configure::read('Site.media') .' has been saved', true));
} else {
$this->Session->setFlash(__('The '. Configure::read('Site.media') .' could not be saved. Please, try again.', true));
}
}
$this->data = $this->Story->read(null, $id);
}
Story:
class Story extends AppModel {
var $name = 'Story';
var $primaryKey = 'story_id';
var $validate = array(
'author_id' => array('numeric'),
'title' => array('notempty'),
'story' => array('notempty'),
'genra' => array('notempty'),
'form' => array('notempty'),
'wordcount' => array('Please enter a number between 1 and 1000' => array(
'rule' => array('range', 1, 1001),
'message' => 'Please enter a number between 1 and 1000'),
'Required' => array('rule' => 'numeric', 'required' => true)
)
);
//The Associations below have been created with all possible keys, those that are not needed can be removed
var $belongsTo = array(
'Author' => array(
'className' => 'Author',
'foreignKey' => 'author_id'
)
);
var $hasMany = array(
'UserNote' => array(
'className' => 'UserNote',
'foreignKey' => 'story_id',
'dependent' => false,
'conditions' => 'UserNote.notes != ""'
)
);
}
Câu chuyện xem:
echo $form->create('Story', array('action' => 'edit'));
echo $form->input('story_id',array('type'=>'hidden'));
echo $form->input('title');
echo $form->input('story');
echo $form->input('bio');
echo $form->end('Update story details');?>
bảng câu chuyện
CREATE TABLE IF NOT EXISTS `stories` (
`story_id` int(11) NOT NULL AUTO_INCREMENT,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`closed` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`author_id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`story` text NOT NULL,
`genra` varchar(255) NOT NULL,
`form` varchar(128) DEFAULT NULL,
`wordcount` varchar(255) NOT NULL,
`terms` varchar(255) NOT NULL DEFAULT '0',
`status` varchar(255) NOT NULL DEFAULT 'slush',
`published` date NOT NULL,
`payment` varchar(255) NOT NULL DEFAULT 'none',
`paypal_address` varchar(255) NOT NULL,
`resubmission` tinyint(1) NOT NULL DEFAULT '0',
`bio` text NOT NULL,
`password` varchar(255) NOT NULL DEFAULT 'yyggrrdd',
`comments` text NOT NULL,
PRIMARY KEY (`story_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10905 ;
Làm cách nào để bạn thực hiện việc này khi Khóa chính khác trên Bảng tham gia? –
@fewpeople đưa ra ví dụ? –
hoạt động tốt, mặc dù đây có phải là phương pháp phù hợp không? Điều này có thể can thiệp vào một số chức năng AutoMagick từ CakePHP không? –