CakePHP - добавить товар к 2 моделям - PullRequest
1 голос
/ 19 апреля 2011

Как я могу добавить элемент и вставить его в 2 таблицы?

Итак, у меня есть таблица «Type» и таблица «SpecificType».

Тип имеет поля 'id' и некоторые другие общие поля.
SpecificType имеет поля 'id', 'type_id' и некоторые другие необычные поля.

Когда я захожу в / specific_types / add и отправляю, в идеале я хочу сначала добавить это в «Type», а затем добавить в «SpecificType».

Это то, что у меня сейчас.

В модели SpecificType

var $belongsTo = array(
    'Type' => array(
        'className' => 'Type',
        'foreignKey' => 'type_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

В контроллере SpecificType

var $uses = ('Type', 'SpecificType');

function add() {
    if (!empty($this->data)) {
        $this->Type->create();
        if ($this->Type->save($this->data)) {
            $this->SpecificType->create();
            if ($this->SpecificType->save($this->data)) {
                $this->Session->setFlash(__('The SpecificType has been saved', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The SpecificType could not be saved. Please, try again.', true));
            }
        } else {
            $this->Session->setFlash(__('The Type could not be saved. Please, try again.', true));
        }
    }
}

В SpecificType add.ctp

echo $form->input('Type.data1');
echo $form->input('title');

Итак, сейчас сохраняется Type.data1, но заголовок не сохраняется. Чего мне не хватает?

Спасибо
Тройник

Дополнительная информация: Вторая модель не сохраняется только при включении MeioUpload.

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

Убедитесь, что ваш вид настроен для создания формы для SpecificType:

<?php echo $this->Form->create('SpecificType', array('action' => 'add')); ?>
<?php echo $this->Form->input('data1'); ?>
<?php echo $this->Form->input('title'); ?>
<?php echo $this->Form->end(); ?>

Это поместит все данные вашей формы в: $this->data['SpecificType']

Прямо перед вашим кодом:

$this->Type->create();

Вам нужно сделать это:

$this->data['Type'] = $this->date['SpecificType'];

Затем обработайте сохранение. Пока представление правильно настроено для контроллера SpecificType, все данные из формы будут храниться в $this->data['SpecificType']. Если вы pr($this->data) и есть данные, которые необходимо сохранить за пределами $this->data['SpecificType'], просмотрите и исправьте представление.

Примечание: Ваш дизайн звучит ужасно схематично. Вам никогда не нужно сохранять данные в двух местах. Я бы порекомендовал пересмотреть дизайн вашего приложения. В этом есть что-то принципиальное, если вам нужно сохранить одни и те же данные в две таблицы.

0 голосов
/ 01 марта 2013

Код выглядит нормально, используйте saveAll вместо save

0 голосов
/ 19 апреля 2011

Просто скопируйте данные в индекс SpecificType в массиве данных и используйте saveAll (). Модели связаны, поэтому Cake автоматически свяжет их через type_id. Мы работаем с псевдонимом Type, поэтому убедитесь, что в вашей модели Type также есть var $hasMany = array('SpecificType');.

function add() {
    if (!empty($this->data)) {
        $this->Type->create();
        $this->data['SpecificType'] = $this->data;
        if ($this->Type->saveAll($this->data)) {
            $this->Session->setFlash(__('The SpecificType has been saved', true));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The SpecificType could not be saved. Please, try again.', true));
        }
    } else {
        $this->Session->setFlash(__('The Type could not be saved. Please, try again.', true));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...