Tôi đang cố gắng để có được các mô hình liên kết của tôi trong CakePHP 2.3 để lưu đúng cách, nhưng tôi đang gặp sự cố. Tôi đang lưu trữ bài đăng và tôi muốn biết những liên kết nào nằm trong các bài đăng đó. Đối với mỗi liên kết đó, tôi muốn lưu trữ văn bản liên kết nếu nó có sẵn. Cơ sở dữ liệu của tôi được thiết lập như trong sơ đồ sau.CakePHP saveAssociated không lưu HasMany Thông qua Mẫu dữ liệu
Database Diagram http://derekperkins.com/wp-content/uploads/cakephp-database.png
Neo Mẫu
class Anchor extends AppModel {
public $hasMany = array(
'PostsUrl' => array(
'className' => 'PostsUrl',
'foreignKey' => 'anchor_id',
'dependent' => false
)
);
public function save($data = NULL, $validate = true, $fieldList = array()) {
$id = Anchor::find('first', array(
'fields' => array('id'),
'recursive' => -1,
'conditions' => array('anchor' => $data['anchor'])
));
if($id)
$data['id'] = $id['Anchor']['id'];
return parent::save($data, $validate, $fieldList);
}
}
URL mẫu
class Url extends AppModel {
public $hasMany = array(
'PostsUrl' => array(
'className' => 'PostsUrl',
'foreignKey' => 'url_id',
'dependent' => false
)
);
public function save($data = NULL, $validate = true, $fieldList = array()) {
$id = Url::find('first', array(
'fields' => array('id'),
'recursive' => -1,
'conditions' => array('url' => $data['url'])
));
if($id)
$data['id'] = $id['Url']['id'];
return parent::save($data, $validate, $fieldList);
}
}
PostsUrl Mẫu
class PostsUrl extends AppModel {
public $belongsTo = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'post_id'
),
'Url' => array(
'className' => 'Url',
'foreignKey' => 'url_id'
'Anchor' => array(
'className' => 'Url',
'foreignKey' => 'anchor_id'
)*/
);
}
bài mẫu
class Post extends AppModel {
public $hasMany = array(
'PostsUrl' => array(
'className' => 'PostsUrl',
'foreignKey' => 'post_id',
'dependent' => false
)
);
public function save($data = NULL, $validate = true, $fieldList = array()) {
$id = Post::find('first', array(
'fields' => array('id'),
'recursive' => -1,
'conditions' => array('external_post_id' => $data['external_post_id'])
));
if($id)
$data['id'] = $id['Post']['id'];
return parent::save($data, $validate, $fieldList);
}
}
Nộp dữ liệu
tôi đã tạo ra một hình thức để kiểm tra mô hình của tôi. Đây là mã tôi đang sử dụng để lưu mảng được tạo bởi biểu mẫu. Tôi nhận được một thông báo nói rằng mọi thứ đã được lưu thành công, nhưng chỉ có bài lưu. Không có gì được nhập vào ba bảng khác. Tôi cũng đang sử dụng DebugKit và không có cuộc gọi SQL nào tham chiếu đến bất kỳ dữ liệu nào.
$this->Post->saveAssociated($this->request->data, array('deep' => true))
Array
(
[Post] => Array
(
[external_post_id] => 12345
[sentiment_score] => 3.3
)
[URL] => Array
(
[url] => http://test.com
)
[Anchor] => Array
(
[anchor] => Test Anchor
)
)
Tôi cũng đã cố định dạng mảng của mình để có URL và neo bên dưới PostsUrl dưới dạng một phần phụ, nhưng điều đó cũng không hoạt động.
Mô hình của tôi :: lưu các chức năng ở đó để giữ cho tôi sao chép dữ liệu và chúng hoạt động bình thường trong các mô hình khác mà tôi đã sử dụng trước đây (mặc dù tôi đang mở để gợi ý cách tốt hơn để làm điều này sử dụng một cuộc gọi cơ sở dữ liệu cho mỗi kiểm tra). Tôi cũng đã cố gắng bình luận chúng ra, và nó không ảnh hưởng đến mã của tôi. Làm thế nào tôi nên cấu trúc này để tiết kiệm đúng cách?
Bạn đã cố gắng 'saveAll() 'và' saveAssociated() '? –
Bạn đã thử lưu bằng một trong các phím liên quan (URL hoặc Anchor) để xem liệu một trong số đó có gây ra sự cố không? Cũng có thể có giá trị cố gắng để đưa vào một khóa PostsUrl với một mảng đánh số và đặt các URL và các phím neo trong một trong số đó (ví dụ Array ([PostsUrl] => Array (0 => Array ('Url' => Array (. ..), 'Anchor' => Array (..))) sau đó sử dụng SaveAll –