dtjo51649 2017-04-18 05:43
浏览 7
已采纳

使用mysql查询返回的数据在cakephp中创建下拉列表

app/Controller/Actionscontroller.php

<?php
App::uses('AppController', 'Controller');

class ActionsController extends AppController {
  public Function index(){
    App::import('Model', 'ConnectionManager');
    $con = new ConnectionManager;
    $cn = $con->getDataSource('default');

    $tablequery="SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='cakephp_db' AND TABLE_NAME != 'report'";
    $this->set('table',$cn->query($tablequery));
  }
}
?>

app/View/Actions/index.ctp

<fieldset>
  <table>
    <tr><th><td>OR</td></th></tr>
    <tr>
      <th>CHOOSE EXISTING DATA</th>
      <td>
      <?php  echo $this->Form->create('table',array('type' => 'get'));
            echo $this->Form->select('table ',  $table,['empty' => 'choose one']);?>          
      <?php  echo $this->Form->end('submit'); ?>
  </td>
    </tr>
    </table>
  </fieldset>

app/model/action.php

<?php
App::uses('AppModel', 'Model');

class Action extends AppModel {
  public $validate = array(
        'table'=> array(
          'required' => array(
            'rule'=> 'notBlank',
            'message' => 'atleast select one table'
          )
        )
      );
}
?>

I need the result in this format. a sample output i have written

<select name="field">
    <option value="">(choose one)</option>
    <option value="0">1</option>
    <option value="1">2</option>
    <option value="2">3</option>
    <option value="3">4</option>
    <option value="4">5</option>
</select>

But i am getting the output in this format;By running this code.Help me to solve the issue.

<select name="table " id="tableTable">
<option value="">choose one</option>
</optgroup>
<option value="TABLE_NAME">Employee</option>
<optgroup label="TABLES">
<optgroup label="1">
</optgroup>
<option value="TABLE_NAME">House_Price</option>
<optgroup label="TABLES">
</optgroup>
<optgroup label="2">
</optgroup>
<option value="TABLE_NAME">insurence</option>
<optgroup label="TABLES">
</optgroup>
<optgroup label="3">
</optgroup>
<option value="TABLE_NAME">posts</option>
<optgroup label="TABLES">
</optgroup>
<optgroup label="4">
</optgroup>
<option value="TABLE_NAME">topics</option>
<optgroup label="TABLES">
</optgroup>
<optgroup label="5">
</optgroup>
<option value="TABLE_NAME">users</option>
<optgroup label="TABLES">
</optgroup>
<optgroup label="6">
</optgroup>
<option value="TABLE_NAME">visualizations</option>
<optgroup label="TABLES">
</optgroup>
</select>          
  • 写回答

1条回答 默认 最新

  • dongtiao2105 2017-04-18 06:13
    关注

    If you have gone througn the doc of cakephp

    https://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::select

    If you give structure like this

    $options = array(
       'Group 1' => array(
          'Value 1' => 'Label 1',
          'Value 2' => 'Label 2'
       ),
       'Group 2' => array(
          'Value 3' => 'Label 3'
       )
    );
    echo $this->Form->select('field', $options);
    
    Output will be:
    
    <select name="data[User][field]" id="UserField">
        <optgroup label="Group 1">
            <option value="Value 1">Label 1</option>
            <option value="Value 2">Label 2</option>
        </optgroup>
        <optgroup label="Group 2">
            <option value="Value 3">Label 3</option>
        </optgroup>
    </select>
    

    That's what in your case is happening .

    You have to change the structure of the response you are getting like this

    echo $this->Form->select('field', array(
        'Value 1' => 'Label 1',
        'Value 2' => 'Label 2',
        'Value 3' => 'Label 3'
    ));
    Output:
    
    <select name="data[User][field]" id="UserField">
        <option value=""></option>
        <option value="Value 1">Label 1</option>
        <option value="Value 2">Label 2</option>
        <option value="Value 3">Label 3</option>
    </select>
    

    So you have to make changes to your code as bellow

        $tablequery="SELECT TABLE_NAME
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='cakephp_db' AND 
        TABLE_NAME != 'report'";
        $rows = $cn->query($tablequery)->fetchAll('assoc');
    
        $dataToSend = [];
        foreach ($rows as $row) {
            $dataToSend[$row['TABLE_NAME']] = $row['TABLE_NAME'];
        }
    
        $this->set('table',$dataToSend);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站