在ZF2

2017-01-26 70 views
-1
將數據添加到MySQL表

這是添加動作的代碼,此操作將主旨名稱(來自受試者表),totalMarks和說明(從SubjectMarks表)在ZF2

public function addAction() { 
    $postArray = $this->params()->fromPost(); 
    $entityManager = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); 

這如果如果輸入數據條件設置真,Add按鈕被點擊

if (isset($postArray['submit']) && $postArray['subjectName']) { 
     $subjectMarks = new SubjectMarks(); 


     $subjectMarks->setSubject(
      $entityManager->find('Application\Entity\Subjects', $postArray['subjectName']) 
     ); 

     $subjectMarks->setClasses(
      $entityManager->find('Application\Entity\Classes', $postArray['classId']) 
     ); 
     $subjectMarks->setSubject(
      $entityManager->find('Application\Entity\Subjects', $postArray['subjectId']) 
     ); 

     $subjectMarks->setTotalMarks($postArray['totalMarks']); 
     $subjectMarks->setDescription($postArray['subjectMarksDesc']); 
     $entityManager->persist($subjectMarks); 
     $entityManager->flush(); 

     return $this->redirect()->toUrl($this->getRequest()->getBaseUrl().'/subjectmarks/totalmarks/index'); 
    } 

首先其他被執行的運行查詢和將數據發送到在的形式的「添加」視圖「數據」

else 
    { 
     $entityManager = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); 
     $qb = $entityManager->createQueryBuilder(); 
     $qb->select(array(
      'subjectMarks.subjectMarkId as subjectMarkId', 
      'subjectMarks.totalMarks as totalMarks', 
      'subjectMarks.description as subjectMarksDesc', 
      'subject.subjectId as subjectId', 
      'subject.name as subjectName', 
      'class.classId as classId', 
     )) 
      ->from('Application\Entity\SubjectMarks', 'subjectMarks') 
      ->leftJoin('subjectMarks.subject', 'subject') 
      ->leftJoin('subjectMarks.classes', 'class'); 
     $data = $qb->getQuery()->getScalarResult(); 

     return new ViewModel(array(
       'data' => $data, 
      ) 
     ); 
    } 
} 

這是add.phtml「形式」被稱爲當代碼'else'部分執行並且查詢選擇所需的數據,並且將寫入的數據發送回去,在那裏它被if()條件接收。

<form name="myForm" action="<?php echo $this->url('subjectmarks/totalmarks', array('action'=>'add'));?>" method="POST"> 
<input type="hidden" name="classId" value="<?php echo $this->data[0]['classId'];?>"> 
<input type="hidden" name="subjectId" value="<?php echo $this->data[0]['subjectId'];?>"> 
<input type="text" name="subjectName" > 
<input type="text" name="totalMarks" > 
<input required="required" type="text" name="subjectMarksDesc" > 

<button type="reset" class="btn btn-primary" > <a style="color: white" href="<?php echo $this->basePath('subjectmarks/totalmarks/index');?>">Cancel</a></button> 
<button type="submit" name="submit" class="btn btn-success">Submit</button> 

問題totalMarkssubjectMarkDesc正確添加,而subjectName取主題表的ID [0],對於被輸入的任何名稱。

回答

0

答案很簡單,因爲我們可以看到,subjectName插入輸入和subjectId是隱藏的,所以沒有直接關係即,該澄清subjectName分配給subjectId

所以把一個select HTML標籤就能解決問題,如

<select name="addSubjectMarks"> 
<?php foreach ($this->data as $item):?> 

在這裏我們可以看到subjectId和主旨名稱是相關的,不同的問題

<option value="<?php echo $item['subjectId'];?> "> <?php echo $item['subjectName'];?> </option> 
<?php endforeach; ?> 
</select> 

同樣在控制器裏面,在if (isset($postArray['submit']) && $postArray['subjectName'])的條件下,我們只會替換這個代碼

$subjectMarks->setSubject(
      $entityManager->find('Application\Entity\Subjects', $postArray['addSubjectMarks']) 
     ); 

與此代碼

$subjectMarks->setSubject(
     $entityManager->find('Application\Entity\Subjects', $postArray['subjectName']) 
    ); 
$subjectMarks->setSubject(
     $entityManager->find('Application\Entity\Subjects', $postArray['subjectId']) 
    ); 

,它會完美。選擇標籤將只輸出主題表中已有的subjectNames