我很难在我的数据库中保存文件或照片。在我的行动中
if($r->isMethod('post')) {
$this->form->bind($r->getParameter('applicants'), $r->getFiles('applicants'));
//$this->form->bind($r->getParameter('applicants'));
$this->familyForm->bind($r->getParameter('applicant_family_info'));
if($this->form->isValid() && $this->familyForm->isValid()) {
$values = $this->form->getValues();
$familyValues = $this->familyForm->getValues();
$applicantId = Doctrine_Core::getTable('Applicants')->createOrUpdateObject($values, $familyValues, $this->getUser()->getUsername());
$this->getUser()->setFlash('good', 'New applicant record created successfully!');
$this->redirect('loans/new_applicant_loan?applicant_id='.$applicantId);
这将保存输入的数据减去照片列。但是,如果我添加$ this-> form-> save(); ,这将保存包括照片字段在内的数据,但照片是重复的,有关如何解决此问题的任何想法?
使用$ this-> form-> save();
如果我删除$ this-> form-> save(),则
返回null;顺便说一句,我有两个表格,申请人和applicant_family_info
和此ApplicantsTable.class.php
public function createOrUpdateObject($values, $infoValues, $currentLoggedInUser, $obj = null) {
$isUpdate = true;
if(empty($obj)) {
$obj = new Applicants();
$isUpdate = false;
}
$db = $this->getConnection();
$db->beginTransaction();
foreach($values as $k=>$v) {
$obj->$k = $v;
}
if(!$isUpdate) {
$obj->created_by = $currentLoggedInUser;
$obj->date_created = date('Y-m-d H:i:s');
} else {
$obj->updated_by = $currentLoggedInUser;
$obj->date_updated = date('Y-m-d H:i:s');
}
$obj->save();
if(!$isUpdate) {
$applicantId = $db->lastInsertId();
} else {
$applicantId = $obj->id;
}
if(!$isUpdate) {
$info = new ApplicantFamilyInfo();
} else {
$info = $obj->ApplicantFamilyInfo;
}
foreach($infoValues as $k=>$v) {
$info->$k = $v;
}
$info->applicant_id = $applicantId;
$info->save();
$db->commit();
return $applicantId;
}
答案 0 :(得分:0)
当您使用form->save()
然后调用createOrUpdateObject()
时,您将对象保存到数据库两次,这就是您在申请人表格中有重复条目的原因。
'魔术'为什么在第一种情况下你得到文件名而在第二种情况下不在于Symfony处理上传文件的方式。在第二种情况下,您从表单中读取值,包括photo
字段,但该字段实际上没有设置值(有一个与该字段关联的文件,但它不是它的'“值” )。当您第一次执行表单的save
方法时,Symfony会处理文件上载(将文件从临时位置移动到上传的文件,更改名称等)并作为回报设置photo
字段的值你是文件的完整物理路径。
你真的需要createOrUpdateObject
功能吗?除了保存表单之外,还能做什么吗?如果您需要修改任何其他值,您可以始终使用Doctrine的生命周期函数:preSave
,preInsert
,postDelete
等。
答案 1 :(得分:0)
经过一些谷歌搜索,并尝试,我终于找到了解决我的问题的方法。文件路径成功保存在mysql中,这次没有重复。这是我编辑的代码:
if($r->isMethod('post')) {
$this->form->bind($r->getParameter('applicants'), $r->getFiles('applicants'));
$photo = $this->form->getValue('photo');
$photo->save();
$this->familyForm->bind($r->getParameter('applicant_family_info'));
if($this->form->isValid() && $this->familyForm->isValid()) {
$values = $this->form->getValues();
//$this->form->save();
//$values = $this->form->getValues('photo');
//$photo->save();
//$filename = 'photo'.sha1($photo->getOriginalName());
//$extension = $photo->getExtension($photo->getOriginalExtension());
//$photo->save(sfConfig::get('sf_upload_dir'));// . $filename . $extension);
//$photo->save(sfConfig::get('sf_upload_dir') . '/'.$photo . date('Ym'));// . '/' . $filename . $extension);
//$photo->save(sfConfig::get('sf_upload_dir').'/photos/'.$photo);
$familyValues = $this->familyForm->getValues();
$applicantId = Doctrine_Core::getTable('Applicants')->createOrUpdateObject($values, $familyValues, $this->getUser()->getUsername());
$this->getUser()->setFlash('good', 'New applicant record created successfully!');
$this->redirect('loans/new_applicant_loan?applicant_id='.$applicantId);
}
}
}
这是mysql
在这里,在我的模板中出现了我的新问题..
<?php echo $applicant->photo ?>
将渲染文件名而不是图像(C:\ wamp \ www \ ian_loans \ web \ uploads / photos \ 85c4153ed074657c58db526e5f8349183cb08469.jpg) 我试过
<td width="129" rowspan="5"><img src="/uploads/photos/<?php echo($applicant->photo)?>" width="129" height="129" /></td>
并且照片永远不会出现......我在这里缺少什么?