如何在cakephp上检索foreach中的结果数据

时间:2013-09-20 11:11:13

标签: cakephp-2.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方法代码?控制器和模型 ,我不会用硬编码方式破解MVC方法。

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

1 个答案:

答案 0 :(得分:0)

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

步骤1:创建一个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';

第2步:为此

创建模型
<?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';
}

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

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

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

echo $this->Form->select('segments',$segments);