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' => ''
    )
          );
È stato utile?

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

Hai provato a usare

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

Prova questo link SaveAll

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top