2010-01-18 36 views
2

我這個表我的DB:CakePHP的名單問題

Group 

- ID-Name 
- 1 -abc 
- 2 -def 
- 3 -ghi 

Pages 

- id-group_id-name 
- 1 -1  -home 
- 2 -1  -about us 

現在,我想作一個選擇框,通過「組」使用它們分組:

function add() { 

$this->set('pages', $this->Page->find('list', array('fields' => array('Page.id', 'Page.name', 'Page.group_id')))); 

} 

在我的外接。 CTP:

echo $form->input('group_id', array('options' => $pages)); 

輸出:

<select name="data[Page][id]" id="PageId"> 
<optgroup label="1"> 
<option value="1">Home</option> 
<option value="2">About Us</option> 
</optgroup> 
</select> 

我希望OPTGROUP顯示實際的組名不是組ID,如:

<select name="data[Page][id]" id="PageId"> 
<optgroup label="abc"> 
<option value="1">Home</option> 
<option value="2">About Us</option> 
</optgroup> 
</select> 

我已經試過這一個:

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'))); 

但 'Group.id' 和「組.name'是未知的。

謝謝!

+0

可以顯示所有參與創建選擇框代碼的任務? <?PHP回聲$形式 - > 1.輸入( '場',陣列( '選項'=>數組( 2. '的Label1'=>數組(: 您通常通過傳遞數組名這樣定義optgroups 5.'Value 1'=>'Label 1', 4.'Value 2'=>'Label 2' 5.), 6.'Label2'=> array( 7.'Value 3'=' >'Label 3' 8.) 9.))); ?> – pcp 2010-01-18 17:33:10

+0

我真的已經搞清楚了這一點,我同樣的問題,都可以在這裏找到http://cakeqs.org/eng/questions/view/find_list_problem。 我希望這可以幫助你們:) – 2010-01-18 20:14:29

回答

3

試試這個:

$this->Page->find('list', array(
    "fields" => array("Page.id", "Page.name", "Group.name"), 
    "joins" => array(
     array(
      "table" => "groups", 
      "alias" => "Group", 
      "type" => "INNER", 
      "conditions" => array("Group.id = Page.id") 
     ) 
    ), 
    "order" => array(...) // whatever ordering you want 
)); 
+0

太棒了!謝謝。 – 2010-01-19 14:32:23

0

我不知道你的頁面和編組模式是否正確關聯:

http://book.cakephp.org/view/78/Associations-Linking-Models-Together

但最起碼,你可能需要加載組模型,你必須在頁面控制器$這個 - >頁面 - >找到(..)查詢,像這樣:

$this->loadModel('Group'); 

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'))); 
0

另外,'group'=>'Group.name'是您可以爲查找設置的另一個參數。它將在SQL中設置一個GROUP BY。

1

我花了一段...

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'),'recursive'=0)); 

否則找到(「名單」)使用遞歸= -1,將不會加載該組數據

1

實施CakePHP中的選項組選擇框是一項非常簡單的任務。

按照給定的步驟來實現選項組。

例如,如果您有兩個表:

  1. 類別,
  2. 子目錄

兩個表創建模型和子類別模型添加一條線,

var $belongsTo = array('Category'); 

所以你的子類別模型看起來像

class Subcategory extends AppModel 
{ 
    var $name = 'Subcategory'; 
    var $belongsTo = array('Category'); 
} 

Now come to controller part 

$this->set('subcategory',$this->Subcategory->find('list', array(
    "fields" => array("Subcategory.id", "Subcategory.field2", "Category.field1"), 
    "joins" => array(
      array(
        "table" => "categories", 
        "alias" => "Category", 
        "type" => "INNER", 
        "conditions" => array("Category.id = Subcategory.category_id") 
      ) 
    ), 
)));?> 

鑑於部分

<?php 
echo $form->input('subcategory_id',array('type'=>'select','options'=>$subcategory)); 
?>