2017-04-18 64 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