2017-01-26 9 views
-1

Это код для добавления действия, Это действие добавляет SubjectName (от предметов таблицы), totalMarks и Описание (от SubjectMarks таблицы)Добавления данных тузда таблице в ZF2

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

Это если условие установлено верно, если данные вводятся и AddButton щелкают

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> 

Проблема в том, чтоtotalMarks и subjectMarkDesc добавляются правильно, в то время как subjectName берется идентификатор [0] предметного стола, для любого имени, которое вводится.

ответ

0

Ответ прост, как мы можем видеть, что subjectName вставляется в качестве входных данных и subjectId скрыт, так что нет прямого отношения то есть, что выяснить, какой subjectName присваивается subjectId.

Так положить select HTML тег будет решить эту проблему, например,

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

Здесь мы можем увидеть subjectId и Subjectname связаны, в отличие от вопроса

<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']) 
    ); 

, и это будет прекрасно. Тег select выведет только те subjectNames, которые уже присутствуют в тематической таблице.