2015-10-12 25 views
0

我想在CakePHP 3中創建一個分組事物的列表,以在表單的選擇列表中創建分組列表。我不確定我是否錯過了一些東西,或者我是否期望太多的蛋糕,並且應該做更多的自己。在CakePHP 3中分組選擇列表(optgroup)

我有一個名爲Issues的控制器和一個名爲RelatedIssues的自引用列。每個Issue都屬於System,這是我希望將問題分組的問題。

在我IssuesTable.php

$this->belongsTo('RelatedIssues', [ 
    'className' => 'Issues', 
    'foreignKey' => 'issue_id' 
]); 

$this->belongsTo('Systems', [ 
    'foreignKey' => 'system_id', 
    'joinType' => 'INNER' 
]); 

...在我IssuesControlleredit方法:

$relatedIssues = $this->Issues->RelatedIssues->find('list', [ 
    'groupField' => 'system_id' 
]); 

當我到下拉列表中,項目被system_id爲分組指定,但我不知道如何讓他們按System的標題字段分組。這甚至是可能的,還是我必須寫一個不錯的嵌套foreach結構來做到這一點?

回答

2

應該是(can'try現在):

$relatedIssues = $this->Issues->RelatedIssues->find('list', [ 
    'groupField' => 'system.title' 
])->contain('Systems'); 
+0

如果我添加了含有(),但留下 'SYSTEM_ID',我得到「完整性約束違規:1052列順序條款中的'標題'不明確」。我在其他地方完成了一些奇怪的事情。 – Vaughany

+0

看來您在某處添加了訂單子句。也許在你的Tables文件中的一個 – arilia

+0

謝謝@arilia,我確實在控制器中的所有'findAll'查詢中都有一個order子句。我不認爲這會產生不利影響。但是我確實想對這份清單進行排序,我會怎麼做呢? – Vaughany

1

考慮以下,更加清晰:

$relatedIssues = $this->Issues->RelatedIssues->find('list', [ 
     'contain' => ['Systems'],   
     'order' => [ 'Systems.title' => 'ASC', 'RelatedIssues.title' => 'ASC'],   
     'groupField' => function($entity) { 
      return $entity->system->title;    
     } 
]); 
+0

這一個實際上爲我工作。乾杯 – jpruizs