CakePHP: получить идентификатор категории из таблицы категорий и вставить в столбец таблицы элементов - PullRequest
1 голос
/ 22 мая 2011

Я новичок в CakePHP и пробовал некоторые уроки по нему.

В настоящее время у меня есть таблица категорий и таблица предметов;Категория hasMany Item и Item принадлежит к категории.

В моей таблице Items у меня есть столбец category_id, который ссылается на идентификатор категории в таблице Categories.

Пользователь может только добавлятьэлемент через страницу view.ctp категорий, и он перенаправит пользователя на страницу add.ctp элементов.Функция add () находится в контроллере элементов.

Как получить идентификатор категории, в которую пользователь хочет добавить элемент, и вставить их в столбец category_id всякий раз, когда пользователь добавляет элемент?

Заранее спасибо.

1 Ответ

0 голосов
/ 22 мая 2011

В контроллере:

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 будет сохранен как любое другое поле модели * 1012. *


Если вы хотите предварительно заполнить категорию с другой страницы, используйте что-то вроде этого:

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']));
...