cakephp中的id字段被截断

cakephp中的id字段被截断,cakephp,Cakephp,我有一个“报告”功能,它提供了一个选项下拉列表和一个提交按钮。选择一个选项后,它会将该选项的ID传递给另一个名为“GeneratePaientInfo($ID=null)”的函数,该函数随后生成一个csv。我的问题是ID在第一个数字之后被截断。一位数的id像2,5,6,9等等都是按预期的方式工作的,但是如果id是2044,它会将id截断为2,并使用id为2而不是2044的选项显示信息。这是令人困惑的,我不知道如何解决它。下面是操作的控制器和视图代码 function report(){ $th

我有一个“报告”功能,它提供了一个选项下拉列表和一个提交按钮。选择一个选项后,它会将该选项的ID传递给另一个名为“GeneratePaientInfo($ID=null)”的函数,该函数随后生成一个csv。我的问题是ID在第一个数字之后被截断。一位数的id像2,5,6,9等等都是按预期的方式工作的,但是如果id是2044,它会将id截断为2,并使用id为2而不是2044的选项显示信息。这是令人困惑的,我不知道如何解决它。下面是操作的控制器和视图代码

 function report(){
$this->set('alldrugs', $this->Drug->find('list', array(
  //'cache' => 'drugList',
  //'cacheConfig' => 'sql',
  'fields' => array('id', 'generic'),
  'order' => 'Drug.generic',
  'recursive' => -1,
)));
if (!empty($this->data['DrugCalls'])) {
  $this->Session->setFlash(sprintf($this->data['DrugCalls']['DrugList']['id']));
  //$this->redirect(array('controller'=>'drugs','action'=>'generatePatientInfo',$this->data['DrugCalls']['DrugList']['id']));
  }
  }

  function generatePatientInfo($id=null) {
    $this->layout = 'ajax';
    // get drug info
    $drug = $this->Drug->read(
      array(
        'Drug.id', 'Drug.generic'
      ),
      $id
    );
    $this->set('drug',$drug);
    $patients = $this->Drug->query('SELECT patients.id, calls.id call_id, patients.first_name, patients.last_name, patients.phone, patients.email, calls.created '
      . 'FROM drugs, drug_lactation_links, lactation, calls, patients '
      . 'WHERE drugs.id = ' . $id . ' AND drugs.id = drug_lactation_links.drug_id AND '
      . 'drug_lactation_links.lactation_id = lactation.id AND lactation.call_id = calls.id AND calls.patient_id = patients.id '
      . 'UNION '
      . 'SELECT patients.id, calls.id call_id, patients.first_name, patients.last_name, patients.phone, patients.email, calls.created '
      . 'FROM drugs, drug_pregnancy_links, pregnancies, calls, patients '
      . 'WHERE drugs.id = ' . $id . ' AND drugs.id = drug_pregnancy_links.drug_id AND '
      . 'drug_pregnancy_links.pregnancy_id = pregnancies.id AND pregnancies.call_id = calls.id AND calls.patient_id = patients.id '
      . 'ORDER BY created DESC'
    );
    $this->set(compact('patients'));
    $this->set('title_for_layout', 'Patient contact information for ' . $drug['Drug']['generic']);
  }
观点:

<?php //report.ctp ?>
<div>

<?php echo $form->create('DrugCalls', array('url' => array('controller' => 'drugs', 'action' => 'report')));?>
<?php //echo $form->create('Patient Calls');?>
  <fieldset>
    <legend><?php printf('Calls for Generic Report'); ?></legend>
  <?php
    echo $form->input('DrugList', array('type' => 'select', 'id' => 'DrugList', 'label' => 'Select generic drug:',
      'empty' => 'Select', 'options' => $alldrugs)
    );
    echo '<br />NOTE: Select a drug above to generate a list of patients who called about it.' .
          '<br/>' . 'The report will need to be imported into Excel.';
    echo $form->end(__('Submit', true));
  ?>
  </fieldset>
</div>



<?php
//generate_patient_info.ctp
// add the header row
$header = array('First Name','Last Name','Phone Number','Email');

$csv->addRow(array('Enter Generic: ' . $drug['Drug']['generic']));
$csv->addRow(array('Drug ID: ' . $drug['Drug']['id']));
$csv->addRow($header);

// add all the data
foreach($patients as $patient) {
  $csv->addRow(array(
    $patient[0]['first_name'],
    $patient[0]['last_name'],
    $patient[0]['phone'],
    $patient[0]['email'],
  ));
}
$csv->addRow(array());

// render the CSV file
echo $csv->render('Patients-list.csv');
?>


我把范围缩小到访问下拉列表信息的方式。在我的报告功能中,我没有正确地访问它。我不得不将它改为:
$this->data['DrugCalls']['DrugList']
而不是
$this->data['DrugCalls']['DrugList']['id']

generatePaientInfo()函数中执行
调试($id);退出-实际传递的函数的ID是否正确?使用
Model::query
通常是不好的做法,因为使用Cake的ORM可以实现99%的需求。如果你还是用它;确保你正确地清理了
$id
@Ross我知道它没有得到正确的id,我不知道的是为什么id会像他们那样被截断。它们都是有效的身份证,但在第一个号码后会被切断。如果是一位数字,GeneratePaientInfo函数可以正常工作。是的,但是
$id
是否确实包含正确的数字,Cake是否以某种方式破坏了它,或者
$id
到达的脚本是否已经损坏?这可能表明您的javascript或表单正在处理数据。如果
2044
确实被传递到了查询,那么问题就出在别处了。@Ross generatePaientInfo()函数获取了错误的id。我将下拉列表设置为只显示id,而报告函数设置为只输出一条显示从下拉列表接收到的id的闪存消息,并显示它已被切断。