2017-04-18 68 views
0

应用程序/控制器/ Actionscontroller.php创建使用下拉菜单使用MySQL查询

<?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)); 
    } 
} 
?> 

应用程序/浏览/操作/ 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> 

应用程序/模型/动作返回的数据.php

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

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

我需要这种格式的结果。样本输出我写

<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> 

但我正在逐渐以这种格式输出;通过运行此code.Help我解决这个问题。

<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>   
+0

为什么在你的代码中使用原始查询。使用'find('list')'而不是https://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-list –

+0

这里我从信息模式获取内容而不是从table.so我写了查询。 – Manasa

回答

1

如果您做了througn CakePHP的

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

的文档。如果你给结构这样

$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> 

这是你的情况发生了什么。

你必须改变你越来越喜欢这个

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> 

响应的结构所以,你必须更改您的代码波纹管

$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); 
+0

在执行上面提到的代码时会导致内部错误说-Call to a function fetchAll()on array – Manasa

+0

remove fetchAll()。它已经在阵列中。它是cakephp 3.x语法;) –

+0

如果我删除了fetchAll(assoc),它将导致未定义的索引:TABLE_NAME – Manasa