【问题标题】:CakePHP: Get category ID from Categories table and insert to a column in Items tableCakePHP:从类别表中获取类别 ID 并插入到项目表中的列中
【发布时间】:2011-05-22 02:33:33
【问题描述】:

我是 CakePHP 的新手,我尝试了一些关于它的教程。

目前我有一个类别表和一个项目表; Category hasMany Item 和 Item 属于一个 Category。

在我的 Items 表中,我有一个 category_id 列,它引用 Categories 表中的类别 ID。

用户只能通过类别 view.ctp 页面添加项目,它会将用户重定向到项目 add.ctp 页面。 add() 函数位于 items 控制器中。

如何获取用户希望添加商品的类别 ID,并在用户添加商品时将其插入到 category_id 列?

提前致谢。

【问题讨论】:

    标签: controller cakephp-1.3


    【解决方案1】:

    在控制器中:

    public function add() {
        if ($this->data) {
            if ($this->Item->save($this->data)) {
                $this->redirect(…);
            }
        }
    
        $categories = $this->Item->Category->find('list');
        $this->set(compact('categories'));
    }
    

    观点:

    echo $this->Form->input('category_id');
    

    (相当于:)

    echo $this->Form->input('category_id', array('type' => 'select', 'options' => $categories));
    

    您只需要获取find('list') 专门用于的类别列表,以及 允许用户选择类别的输入元素。 category_id 将像 Item 模型的任何其他字段一样保存。


    如果您想从其他页面预填充类别,请使用以下内容:

    public function add($category_id) {
        $category = $this->Item->Category->find('first', array('conditions' => array('Category.id' => $category_id), 'recursive' => -1));
        if (!$category) {
            $this->Session->setFlash('Select a valid category');
            $this->redirect(array('controller' => 'categories', 'action' => 'select_category'));
        }
    
        if ($this->data) {
            $this->data['Item']['category_id'] = $category_id;
            if ($this->Item->save($this->data)) {
                $this->redirect(…);
            }
        }
    
        $this->set(compact('category'));
    }
    

    查看:

    <p>Adding item to category <?php echo $category['Category']['name']; ?></p>
    <?php echo $this->Form->create('Item', array('url' => array('action' => 'add', $category['Category']['id']))); ?>
    

    从您的类别选择列表中,只需链接到项目添加操作:

    echo $this->Html->link("Add item to {$category['Category']['name']}", array('controller' => 'item', 'action' => 'add', $category['Category']['id']));
    

    【讨论】:

    • 嗨 deceze,我搜索了 CakePHP 的框架,并找到了更长的解决方案。在类别 view.ctp 中,我创建了一个添加链接,该链接在类别控制器上执行“重定向”功能。在重定向函数中,我使用带有条件的 find() 方法来查找与名称对应的 ID。该对象被放置到一个会话中,然后将用户重定向到餐厅控制器。这样,用户不必从下拉列表中选择,而是单击类别页面来添加项目。也感谢您的意见。祝你有美好的一天。
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2021-12-20
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多