2011-01-14 4 views
1

J'ai schéma comme:embedForm problème de sauvegarde - Symfony

Schéma:

article: 
    id:          ~ 
    title:         { type: VARCHAR, size: '255', required: true } 
    created_at:        { type: TIMESTAMP, required: true } 
    updated_at:        { type: TIMESTAMP, required: true } 

article_data: 
    id:          ~ 
    article_data:       { type: BLOB, required: true } 
    article_filename:      { type: VARCHAR, size: '255'} 
    article_id:        { type: INTEGER, required: true, foreignTable: article, foreignReference: id, onDelete: cascade } 

Donc, dans mon article module admin, j'aimerais afficher le widget article_data, qui est un téléchargement de fichier.

Tout va bien. Mais lors de l'enregistrement du fichier téléchargé sur le serveur, le champ article_id est null.

Y a-t-il un moyen d'obtenir l'ID de l'article et de l'enregistrer sous le nom article_id de la table article_data?

Merci

EDIT:

Je pense que je dois remplacer la méthode saveEmbeddedForm(), mais je ne suis pas sûr de ce que je dois faire.

Quelqu'un pourrait-il aider avec du code pour un saveEmbeddedForm()?

Merci

Répondre

3

Je ne connais pas Propel, mais dans la doctrine que vous pourriez faire quelque chose comme ceci:

class ArticleForm extends BaseForm 
{ 
    public function configure() 
    { 
    parent::configure(); 

    $form = new sfForm(); 
    $datas = $this->getObject()->getDatas(); 

    foreach ($datas as $index => $data) 
     $form->embedForm($index, new ArticleDataForm($data)); 

    $this->embedForm('dataForms', $form); 
    } 

    public function saveEmbeddedForm($con = null, $forms = null) 
    { 
    $dataForms = $this->getEmbeddedForm('dataForms')->getEmbeddedForms(); 

    foreach ($dataForms as $dataForm) 
     $dataForm->getObject()->setArticle($this->getObject()); 

    parent::saveEmbeddedForm($con, $forms); 
    } 
} 
+0

Merci pour la réponse. J'ai utilisé votre code et l'ai modifié un peu. J'ai utilisé: $ this-> embedForm ('article_data', new ArticleDataForm()); plutôt que votre code dans la configuration car votre code n'affiche pas le widget d'entrée pour une raison quelconque. En outre, même lorsque l'entrée est vide, elle crée une nouvelle ligne dans ma table. J'en ai besoin pour en créer un nouveau s'il n'y avait pas d'image et mettre à jour l'image si je l'édite – terrid25

+0

Ça va. J'ai fait une relation de un à plusieurs. Vous avez une relation un à un. Ensuite, faites juste '$ this-> getEmbeddedForm ('article_data') -> getObject() -> setArticle ($ this-> getObject())' dans la fonction 'saveEmbeddedForm'. – joksnet

Questions connexes