我的数据库中有这个表:
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'))));
}
在我的add.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'和'Group.name'未知。
谢谢!
答案 0 :(得分: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
));
答案 1 :(得分:1)
我花了一会儿......
$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'),'recursive'=0));
否则find(“list”)使用recursive = -1并且不会加载组数据
答案 2 :(得分:1)
在cakephp中的选项组中实现选择框是一项非常简单的任务。
按照给定的步骤实施选项组。
例如,如果您有两个表:
为两个表创建模型并在子类别模型中添加一行
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));
?>
答案 3 :(得分:0)
我不确定您的Page和Group模型是否正确关联:
http://book.cakephp.org/view/78/Associations-Linking-Models-Together
但至少,您可能需要在Page控制器中加载Group模型,您可以在其中进行$ this-&gt; Page-&gt; find(..)查找,如下所示:
$this->loadModel('Group');
$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name')));
答案 4 :(得分:0)
另外,'group'=&gt; 'group.name'是您可以为查找设置的另一个参数。它将在SQL中设置GROUP BY。