CakePHP的列表问题

时间:2010-01-18 15:24:44

标签: php 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'))));

}

在我的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'未知。

谢谢!

5 个答案:

答案 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中的选项组中实现选择框是一项非常简单的任务。

按照给定的步骤实施选项组。

例如,如果您有两个表:

  1. 类别,
  2. 子类别
  3. 为两个表创建模型并在子类别模型中添加一行

    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。