“idlogotipo”没有采取任何价值观,我做错了什么?

时间:2013-06-27 21:46:21

标签: symfony1 symfony-1.4

我有这个schema.yml:

SdrivingEmpresa:
  columns:
    idempresa:
      type: integer(4)
      unsigned: true
      primary: true
      autoincrement: true
    idlogotipo:
      type: integer(4)
      unsigned: true
      primary: true
    nombre_empresa:
      type: string(250)
      notnull: true
    ruta_emp:
      type: string(45)
      notnull: true
      autoincrement: false
  relations:
    SdrivingLogotipo:
      local: idlogotipo
      foreign: idlogotipo
      type: one
    SdrivingEmisor:
      local: idempresa
      foreign: idempresa
      type: many
    SdrivingMaquina:
      local: idempresa
      foreign: idempresa
      type: many
    SdrivingOperador:
      local: idempresa
      foreign: idempresa
      type: many
    SdrivingTurno:
      local: idempresa
      foreign: idempresa
      type: many
    SfGuardUserProfile:
      local: idempresa
      foreign: idempresa
      type: many

我在SdrivingLogotipoForm.class.php

中写了这段代码
class SdrivingLogotipoForm extends BaseSdrivingLogotipoForm {

    public function configure() {
        $this->widgetSchema['archivo'] = new sfWidgetFormInputFile(array('label' => ''));
        $this->validatorSchema['archivo'] = new sfValidatorFile(array(
            'required' => false,
            'path' => sfConfig::get('sf_upload_dir'),
            'mime_types' => 'web_images',
        ));
    }

}

,这在SdrivingEmpresaForm.class.php

class SdrivingEmpresaForm extends BaseSdrivingEmpresaForm {

    public function configure() {
        $logotipo = new SdrivingLogotipo();
        $logotipo->setIdlogotipo($logotipo);
        $this->embedForm('logotipo', new SdrivingLogotipoForm());
    }

}

当我执行create()方法时,Empresa已保存,Logotipo文件也已上传,但SdrivingEmpresa中的字段idlogotipo获取0,为什么?我做错了什么?

使用SdrivingEmpresaForm

中的小部件

在阅读@ 1ed建议后,我做了一些更改,现在SdrivingEmpresaForm.class.php有了这段代码:

class SdrivingEmpresaForm extends BaseSdrivingEmpresaForm {

    public function configure() {
        $this->widgetSchema['idlogotipo'] = new sfWidgetFormInputFile(array('label' => ''));
        $this->validatorSchema['idlogotipo'] = new sfValidatorFile(array(
            'required' => false,
            'path' => sfConfig::get('sf_upload_dir'),
            'mime_types' => 'web_images',
        ));
    }

    public function doUpdateObject($values) {
        parent::doUpdateObject($values);

        if (isset($this['idlogotipo'])) {
            if ($this->isNew()) {
                $logotipo = new SdrivingLogotipo();
                $this->getObject()->setSdrivingLogotipo($logotipo);
            } else {
                $logotipo = $this->getObject()->getSdrivingLogotipo();
            }
        }
    }

}

但是当我发送表单时,我收到了这个错误:

  

SQLSTATE [23000]:完整性约束违规:1048列   'idlogotipo'不能为空

logotipo文件未上传,也未创建。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您应该将sfWidgetFormInputFile设置为不在嵌入式for SdrivingEmpresaForm

$this->setWidget('logotipo', new sfWidgetFormInputFile());
...

更新:

如果您希望多个文件属于某个用户,那么您应该将id移动到另一侧,这样外键应该是logotipo表中的empersa id。处理这种关系并不方便......有docs中描述的方法或有plugin可能会有所帮助,但它有局限性。