Я снова и снова читаю книгу из cakephp
, не понимая, как сохранить связанные данные.У меня есть раздел под названием Works
и раздел под названием Мебель, который может содержать Images
:
- id
- title
- body
- url
- user_id
- создан
- изменен
- активен
- id
- title
- body
- url
- user_id
- создан
- изменен
- active
- id
- name
- type
- filepath
- user_id
- создано
- изменено
- активно
Я создал один MVC для каждой сущности (Work
, Furniture
и Image
), и теперь я пытаюсь добавить Work
на мой сайт с представлением add
:
<script>/* script for .add_image, Work and other models can have 0 or more images */</script>
<div><?php echo $this->Form->input('Work.title', array('value'=>'titolo', 'label' => 'Nome lavoro')); ?></div>
<div><?php echo $this->Form->input('Work.body', array('type' => 'textarea', 'value'=>'description', 'label' => 'Descrizione')); ?></div>
<div><?php echo $this->Form->input('Work.url', array('value'=>'http://', 'label'=> false)); ?></div>
<div>Immagini</div>
<div><?php echo $this->Form->input('Image.name', array('label'=> false, 'value'=>'Nome immagine'));?></div>
<div><?php echo $this->Form->file('Image.file'); ?></div>
<div><div class="add_image">Add image</div></div>
<div><?php echo $this->Form->end('Inserisci lavoro'); ?></div>
Это сохраняет только данные Work
без Image
связанные, я предполагаю, что я что-то упускаю в Model
и в Controller
:
<?php
class Work extends AppModel {
var $name = 'Work';
var $belongsTo = array ('User');
var $hasAndBelongsToMany = array (
'Image' => array (
'className' => 'Image',
'order' => 'Image.created DESC',
'exclusive' => true,
'dependent' => true // this will remove all images related to article
),
'Tag' => array (
'className' => 'Tag',
'order' => 'Tag.name DESC'
)
);
var $validate = array (
'title' => array(
'rule' => array('maxLength', 60),
'allowEmpty' => false
),
'body' => array (
'rule' => array('maxLength', 250),
'allowEmpty' => false
),
'url' => array (
'rule' => array('url', true),
'allowEmpty' => true
)
);
function parentNode () {
return null;
}
}
?>
WorksController:
<?php
class WorksController extends AppController {
var $name = 'Works';
var $components = array ('Session');
function index () {
$this->set('works', $this->Work->find('all'));
}
function view () {
$this->Work->id = $id;
$this->set('work', $this->Work->read());
}
function add () {
if (!empty($this->data)) {
$work = $this->Work->save($this->data);
if (!empty($work)) {
// this is wrong, but what should I write?
// $this->data['Image']['user_id'] = $this->Work->User->id;
// $this->Work->Image->saveAll($this->data);
$this->Session->setFlash ('Lavoro inserito correttamente');
$this->redirect(array('action'=>'index'));
}
}
}
}
?>
ImageModel:
<?php
class Image extends AppModel {
var $name = 'Image';
var $hasAndBelongsToMany = array (
'Work' => array (
'className' => 'Work'
),
'Furniture' => array (
'className' => 'Furniture'
)
);
var $actsAs = array ('FileUpload.FileUpload' => array (
'uploadDir' => 'img/shared',// 'forceWebroot' => true, is default
'allowedTypes' => array(
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'gif' => array('image/gif'),
'png' => array('image/png','image/x-png'),
),
'maxFileSize' => 614400, // 600kB in bytes
'unique' => true
));
// in the wiew file: echo $form->input('Image.file', array('type' => 'file'));
var $validate = array (
'name' => array (
'rule' => 'notEmpty',
'message' => 'Nome dell\'immagine in fase di cariamento mancante'
),
'filename' => array (
'rule' => 'notEmpty',
'message' => 'Nome dell\'immagine in fase di cariamento mancante'
)
);
}
?>
Сохраняет только часть Works
данных:
- id - ok
- title - ok
- body -ok
- url - ok
- user_id - 0
- создан - ok
- изменен - ok
- active - это 0
Как мне реализовать Images
в Works
?
Я думал добавить таблицу БД с именем images_works
всвязать Works
с Images
и furnitures_images
, чтобы связать Furnitures
с Images
, что мне нужно сделать, чтобы продолжить и исправить user_id missing error
?