CakePHP 2.0 Aggiunta di dati correlati non riesce con tabella del database mancante
-
26-10-2019 - |
Domanda
sto cercando di salvare i dati in due modelli (un modello e relativo hasMany) contemporaneamente, e hanno avuto un certo successo in un certo numero di posti nella mia app, ma questo approccio non sembra funzionare con tavoli / modelli che hanno nomi sottolineato, vale a dire
//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.'));
}
I lavori di cui sopra bene, però ho un modello di ProductComponent (product_components tabella db)
//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.'));
}
Il modulo sta prendendo questo correttamente come è mostra una Textarea anziché ingresso standard, tuttavia quando saveAssociated viene eseguito, ottengo la risposta:
product__components tabella del database per il modello ProductComponent non è stato trovato.
Perché la torta alla ricerca di una tabella con un nome doppio sottolineata?
Tutte le idee?
Aggiornamento per ISSEM Danny:
public $hasMany = array(
'ProductComponent' => array(
'className' => 'Product_Component',
'foreignKey' => 'product_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
Soluzione
Un paio di cose:
-
Se si dispone di questi tre modelli: prodotto, componente, ProductComponent, mi sembra che stai cercando di rapporti hasAndBelongsToMany di impostazione. Scopri la documentazione di CakePHP.
-
Utilizzo dei componenti come o in un nome del modello sembra confuso per me ..
-
Se si dispone di un modello per una tabella product_components: il tuo modello deve essere denominato "ProductComponent" senza una sottolineatura (torta aggiungerà che automaticamente). Se non seguono le convenzioni di torta è possibile dichiarare la proprietà "useTable". Il modello dovrebbe essere simile a questo:
Codice:
// 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'
)
);
Speranza che aiuta, buona fortuna.
Altri suggerimenti