CAKEPHP 2.0 Agregar datos relacionados falla con la tabla de bases de datos faltantes
-
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' => ''
)
);
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