Php 如何在下拉列表中加载类别名称

Php 如何在下拉列表中加载类别名称,php,cakephp,drop-down-menu,Php,Cakephp,Drop Down Menu,我只想在下拉列表中加载主类别而不是子类别名称。我已经尽力了,但没有成功。这个网站上有很多答案,我试着用那种方式解决我的问题,但没有。下面给出了类别表,它与树中的cakephp文档相同 类别表属性 id |家长| id | lft | rght |姓名| 我在下面的链接中尝试了这些技巧 下面给出了创建类别的控制器的完整代码 if ($this->request->is('post')) { $this->Category->create();

我只想在下拉列表中加载主类别而不是子类别名称。我已经尽力了,但没有成功。这个网站上有很多答案,我试着用那种方式解决我的问题,但没有。下面给出了类别表,它与树中的cakephp文档相同

类别表属性 id |家长| id | lft | rght |姓名| 我在下面的链接中尝试了这些技巧

下面给出了创建类别的控制器的完整代码

 if ($this->request->is('post')) {
            $this->Category->create();
            if ($this->Category->save($this->request->data)) {
                $this->Session->setFlash(__('Category has been saved.'));
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('Unable to add Category.'));
        }
        else 
          $categories = $this->Category->find('list');
          $this->set(compact('categories'));
           return $this; 
      }
类别代码.ctp为

  <?php echo $this->Form->create('Category'); ?>
        <fieldset>
        <legend><?php echo __('Add Category'); ?>
        </legend>
        <?php
                $form->input('id');
        //      echo $this->Form->input('id');
                echo $this->Form->input('name');

        ?>
        </fieldset>
        <?php echo $this->Form->end(__('Submit')); ?>
        </div>
现在,请向我建议在下拉列表中加载数据的解决方案。

您可以将 $this->loadModel'Category'; $categories=$this->categories->find'list'; $this->set'categories',$categories

category.ctp的放置代码为

           <?php if(isset($categories )){
             foreach ($categories as $key => $value) {
                  $id= $value['Category']['id'];
                  $options[$id]=$value['Category']['name'];                   
              }
           } 
           echo $this->Form->select('Category.id', $options,array('class'=>'select2','data-  placeholder'=>'Choose a category','empty'=>''));
             ?>

它会起作用的。

坚持惯例,一切都会好起来的。我假设您需要添加表单中的列表来选择父类别。顺便说一句,您应该在问题中澄清您的意图

对于要按lft排序的树,因此如果使用“查找”列表,则必须在“排序”选项中传递它,并且为了仅检索顶级类别,必须在匹配所有类别的条件下传递,其中父类id为null或父类的id(子类别是主类别)

控制器

看法

有关更多信息,请参阅


在使用代码后,现在面临此错误。调用一个成员函数输入一个非objectin代码,我认为$categories没有引号,是吗?我没有引用它。现在的错误是错误:不能将字符串偏移量用作数组,它位于第3行,即$id=$value['Category']['id'];对于将来的问题,请始终提及您的确切CakePHP版本!好的,我会的,cakephp verion是2.5谢谢,但实际上我只想在用户选择主类别时第一次选择主类别,然后子类别将显示在其他下拉列表中。所以请指导我。@user3623305这是一个完全不同的问题,与你最初的问题没有任何关系。请阅读我的第一个问题与我的上述评论不同,在第一个问题中,我要求显示类别,但在您的解决方案中,所有类别和子类别都将显示。这就是为什么我在上面的评论中提到我的观点。所以,请引导我在下拉菜单中只显示主要类别,因为我在问题的第一行提到了ed。@user3623305您的问题只显示类别,子类别也是类别。您应该更新您的问题,以澄清实际问题,以便对未来的读者有用。
$parents = $this->Category->find('list', array(
    'conditions' => array(
        'Category.parent_id' => null
    ),
    'order' => array(
        'Category.lft' => 'asc'
    )
));
$this->set('parents', $parents);
echo $this->Form->input('parent_id');