2011-01-14 7 views
1

나는이 같은 스키마 :embedForm 절약 문제 - 심포니

스키마 :

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 } 

그래서, 내 문서 관리 모듈에서, 내가 파일 업로드입니다 article_data 위젯을 표시하고 싶습니다.

모든 것이 좋습니다. 그러나 업로드 된 파일을 서버에 저장할 때 article_id 필드는 null입니다.

문서 ID를 가져 와서 article_data 테이블의 article_id로 저장할 수있는 방법이 있습니까?

감사

편집 :

나는 내가 saveEmbeddedForm() 메소드를 오버라이드 (override) 할 필요가 있다고 생각하지만, 내가해야 할 것입니다 무엇 확실하지 않다.

누군가가 saveEmbeddedForm()에 대한 코드를 도울 수 있습니까?

감사

답변

3

내가 추진을 알려져 있지 않지만, 교리에이 같은 일을 할 수있는 : 답장을

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

감사합니다. 귀하의 코드를 사용하여 약간 수정했습니다. 내가 사용 : $ this-> embedForm ('article_data', 새로운 ArticleDataForm()); 어떤 이유로 코드가 입력 위젯을 표시하지 않기 때문에 configure에서 코드가 아닌 또한 입력이 비어있는 경우에도 테이블에 새 행을 만듭니다. 이미지가 없으면 새 이미지를 만들고 편집하는 경우 이미지를 업데이트해야합니다. – terrid25

+0

괜찮습니다. 나는 일대일 관계를 많이했다. 당신은 일대일 관계입니다. 그런 다음'saveEmbeddedForm' 함수에서'$ this-> getEmbeddedForm ('article_data') -> getObject() -> setArticle ($ this-> getObject())'를 수행하십시오. – joksnet