0
下面是生成模型列表的庫的一部分.... ->getBy()
部分僅取SQL並將其放在SQL中的WHERE
子句之後。因此,它會爲執行:WHERE site_id = ? ORDER BY name ASC
SQL結果中的優先級排序
/**
* Get areas
*/
public function getAreas() {
return $this->modelFactory('area')->getBy('site_id = ? ORDER BY name ASC', array($this->siteId));
}
/**
* Get nested areas
*/
public function getNestedAreas() {
$nestedAreas = array();
$areas = $this->getAreas();
if (is_array($areas)) {
foreach ($areas as $area) {
//parent areas
if ($area->getParentId() == NULL) {
$nestedAreas[$area->getId()]['area'] = $area;
} else {
$nestedAreas[$area->getParentId()]['subareas'][] = $area;
}
}
$areas = $nestedAreas;
} else {
$areas = array();
}
return $areas;
}
最終的結果是一個數組,如:
陣列( 陣列( '區域'=>新areaModel()// areaModel爲肯塔基 「子區域'=>數組( 新areaModel(),// areaModel爲辛辛那提 新areaModel(),// areaModel路易斯維爾 新areaModel()// areaModel爲列剋星敦 ) ) )
這個設置的問題是,原來的ORDER BY
將俄亥俄州放在我的嵌套區域的頂部,因爲它的子區域Akron/Canton
首先由ORDER BY
顯示。就像這樣:
<select name='area_id'>
<optgroup label='Ohio'>
<option value='905'>Akron/Canton</option>
<option value='1154'>Cincinnati</option>
<option value='1155'>Cleveland Eastside</option>
<option value='908'>Cleveland Westside</option>
<option value='910'>Dayton</option>
<option value='1394'>Toledo</option>
</optgroup>
<optgroup label='Alabama'>
<option value='988'>Birmingham, AL</option>
<option value='1224'>Huntsville</option>
<option value='712'>Mobile/Baldwin County</option>
....
是否可以簡單地調整我的查詢由那些parent_id IS NULL
那些對parent_id
太棒了!那很完美 – Webnet