CakePHP 2.0 Добавление связанных данных завершается неудачно с отсутствующей таблицей базы данных - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь сохранить данные в две модели (модель и связанную с ним hasMany) одновременно и добился определенного успеха в ряде мест в моем приложении, однако этот подход, похоже, не работает с таблицами / моделями которые подчеркнули имена, то есть

//View Code
echo $this->Form->create('Product');
  echo $this->Form->input('name',array('between' => '<br />'));
  echo $this->Form->input('Component.0.text',array('between' => '<br />'));
echo $this->Form->end(__('Submit'));

//Controller Code
if ($this->Product->saveAssociated($this->request->data)) {
    $this->Session->setFlash(__('The product has been saved'));
    $this->redirect(array('action' => 'index'));
} else {
    $this->Session->setFlash(__('The product could not be saved. Please, try again.'));
}

Выше работает нормально, однако у меня есть модель ProductComponent (таблица базы данных product_components)

//View Code
echo $this->Form->create('Product');
  echo $this->Form->input('name',array('between' => '<br />'));
  echo $this->Form->input('ProductComponent.0.text',array('between' => '<br />'));
echo $this->Form->end(__('Submit'));

//Controller Code
if ($this->Product->saveAssociated($this->request->data)) {
    $this->Session->setFlash(__('The product has been saved'));
    $this->redirect(array('action' => 'index'));
} else {
    $this->Session->setFlash(__('The product could not be saved. Please, try again.'));
}

Форма выбирает это правильно, так как показывает текстовую область, а не стандартный ввод, однако при запуске saveAssociated я получаю ответ:

Таблица базы данных product__components для модели ProductComponent не найдена.

Почему торт ищет стол с двойным подчеркиванием?

Есть идеи?

Обновление для Иссема Дэнни:

public $hasMany = array(
    'ProductComponent' => array(
        'className' => 'Product_Component',
        'foreignKey' => 'product_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
          );

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012

Несколько вещей:

  • Если у вас есть эти три модели: Product, Component, ProductComponent, мне кажется, вы пытаетесь настроить отношения hasAndBelongsToMany. Ознакомьтесь с документами по CakePHP.

  • Использование компонента как или в названии модели меня смущает ..

  • Если у вас есть модель для таблицы product_components: ваша модель должна называться «ProductComponent» без подчеркивания (торт добавит это автоматически). Если вы не следуете правилам тортов, вы можете объявить свойство «useTable». Ваша модель должна выглядеть так:

Код:

// model

class ProductComponent extends AppModel {
    public $name = "ProductComponent";

    // Only needed when not following cake's conventions
    public $useTable = "product_components"; 

    // rest of model code  ...
}

// And the hasmany relation

public $hasMany = array(
    'ProductComponent' => array(
        'className' => 'ProductComponent',
        'foreignKey' => 'product_id'
     )
);

Надеюсь, это поможет, удачи.

0 голосов
/ 17 февраля 2012

Вы пытались использовать

$this->Product->saveAll($this->data))

Попробуйте эту ссылку SaveAll

...