CAKEPHP 2.0 Agregar datos relacionados falla con la tabla de bases de datos faltantes

StackOverflow https://stackoverflow.com/questions/9316143

  •  26-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de guardar datos en dos modelos (un modelo y ha relacionado) simultáneamente, y he tenido cierto éxito en varios lugares en mi aplicación, sin embargo, este enfoque no parece estar trabajando con tablas/modelos que han subrayado nombres, es decir

//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.'));
}

Lo anterior funciona bien, sin embargo, tengo un modelo de componente (DB Table 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.'));
}

El formulario está recogiendo esto correctamente, ya que muestra un textea en lugar de una entrada estándar, sin embargo, cuando se ejecuta saveassociate, obtengo la respuesta:

No se encontró la tabla de datos de la base de datos__ componentes para el modelo de producto modelo.

¿Por qué el pastel busca una mesa con un nombre de doble subrayado?

¿Algunas ideas?

Actualización de Issem Danny:

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

Solución

Unas pocas cosas:

  • Si tiene estos tres modelos: producto, componente, productomponente, me parece que está tratando de configurar las relaciones con la estadía. Mira los documentos de CakePHP.

  • Usar componente como o en un nombre de modelo me parece confuso.

  • Si tiene un modelo para una tabla Product_Components: su modelo debe llamarse "ProductComponent" sin un guión bajo (el pastel lo agregará automáticamente). Si no sigue las convenciones de Cake, puede declarar la propiedad "usable". Tu modelo debería verse así:

Código:

// 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'
     )
);

Espero que ayude, buena suerte.

Otros consejos

Has intentado usar

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

Prueba este enlace Salvar a todos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top