我喜欢为我的项目制作一些通用功能 在一个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]> |_".ucwords($row1['segment_name'])."</option>" );
}
}
?>
</select>
如何将该代码转换为cakephp MVC方法代码?控制器和模型 ,我不会用硬编码方式破解MVC方法。
注意:$ koneksi_db-&gt; sql_query,$ koneksi_db-&gt; sql_fetchrow是我自己的查询过程函数,而对于查询我无法更改为cakephp方法,因为它是我导师的限制程序。
答案 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);