0

我喜欢在 harcode php 模式下为我的项目生成一些通用函数,就像:

    <select id="segment" name="segment">
        <option value=''></option>
            <?php
            $sql = "select segment_id, segment_name, segment_parentid 
from test_segment where segment_parentid = 'root' and segment_status = '1'  order by segment_name asc";

            $sql  = $koneksi_db->sql_query($sql);
            while($row = $koneksi_db->sql_fetchrow($sql)){
                printf( "<option value=$row[segment_id] disabled>".ucwords($row['segment_name'])."</option>" );
                $sql1 = "select segment_id, segment_name, segment_parentid from test_segment where  convert(varchar, segment_id) <> 'root' and
                segment_parentid= '$row[segment_id]' and segment_status = '1' order by segment_name asc";

                $sql1  = $koneksi_db->sql_query($sql1);
                while($row1 = $koneksi_db->sql_fetchrow($sql1)){
                    printf( "<option value=$row1[segment_id]>&nbsp;&nbsp;&nbsp;|_".ucwords($row1['segment_name'])."</option>" );
                }
            }
            ?>
        </select>

如何将该代码转换为 cakephp MVC 方法代码?Controller 和 Model ,我不会用硬编码的方式来破坏 MVC 方法。

注意:$koneksi_db->sql_query, $koneksi_db->sql_fetchrow 是我自己的查询过程函数,对于查询我不能更改为 cakephp 方法,因为它是我导师的限制程序。

4

1 回答 1

0

一种方法是创建一个模型来表示您想要的数据集。然后为需要访问数据的任何控制器加载模型,并使用选择中的数据加载该控制器的视图。

Step1:创建一个 MySQL 视图来表示两条 SQL 语句:

CREATE VIEW segments AS
SELECT segment_id, UPPER(segment_name), segment_parentid, UPPER(segment_name) AS sortfield
FROM test_segment
WHERE segment_parentid = 'root' AND segment_status = '1'
UNION
SELECT UPPER(test_segment.segment_id), test_segment.segment_name, test_segment.segment_parentid, UPPER(CONCAT(parent.segment_name, test_segment.segment_name))
FROM test_segment
JOIN test_segment AS parent
ON test_segment.segment_parentid = parent.segment_id
AND parent.segment_status = '1'
WHERE convert(varchar, test_segment.segment_id) <> 'root' 
AND test_segment.segment_status = '1';

Step2:为此创建模型

<?php
App::uses('AppModel', 'Model');
class Segment extends AppModel {

    // the name of the view
    public $useTable = 'segment';
    public $displayField = 'segment_name';
    public $primaryKey = 'segment_id';
}

Step3:在您想要的任何控制器方法中,使用此代码

$this->loadModel('Segment');
$segments = $this->Segment->find('list', array('order => array('sortfield')));
set('segments', $segments);

Step4:然后在该控制器的视图中,添加元素(我假设您将使用表单助手,否则您可以将html写出来:

echo $this->Form->select('segments',$segments);
于 2013-09-20T14:19:11.153 回答