0

私はcakephpの初心者です。「ユーザー」テーブルと「カテゴリ」テーブルがあります

ユーザーの所属カテゴリ (フィールド: users.id、users.name、users.category) カテゴリ hasMany users (フィールド: category.id、category.name、users.category)

このような関連付けデータに対処しています。

(ユーザー)edit.ctpに入れました

// view/Users/edit.ctp

    echo $this->Form->input('name');
    echo $this->Form->input('categories', array( 'value' => $this->Form->value('User.category'), 
'name'=>'data[User][category]') );
</pre>

in users controller I have
<pre>
    public function edit($id = null) {
        $this->User->id = $id;
        if (!$this->User->exists()) {
            throw new NotFoundException(__('Invalid user'));
        }
        if ($this->request->is('post') || $this->request->is('put')) {
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash(__('The user has been saved'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
            }
        } else {
            $this->request->data = $this->User->read(null, $id);
        }
        $sexes = $this->User->Sex->find('list');
        $categories = $this->User->Category->find('list');
        $this->set(compact('categories'));

    }

すべてが機能していますが、そのフォームを実行するためのはるかに簡単な方法があると思います。これは本当に必要ですか?
, array( 'value' => $this->Form->value('User.category'), 'name'=>'data[User][category]')
これらのパラメーターがないと、選択ボックスは選択したものを強調表示しませんオプションで、何も保存されません。

次のようなものかもしれません

echo $this->Form->input('Category.name');

例えば?しかし、そのようなコードは選択ボックスを表示しません。
users.category フィールドは保存されません。

これに関するサンプルを含むチュートリアルやコードを見つけることができませんでした。リンクをいただければ幸いです。

4

1 に答える 1

0

データベースのテーブルとフィールドに Cake の命名規則を使用するようにしてください。慣例に従えば、Cake は多くの面倒な作業を行ってくれます。

ユーザー テーブル:

users.id, users.name, users.category_id

カテゴリ テーブル

categories.id, categories.name

ユーザーモデル

class User extends AppModel {

    public $belongsTo = array(
        'Category'
    );

}

カテゴリ モデル

class Category extends AppModel {

    public $hasMany = array(
        'User'
    );

}

ユーザー コントローラー:

class UsersController extends AppController {

    public function edit($id) {

        if (!empty($this->request->data) {

            // form submitted - try to save
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash('User updated');
            }
            else {
                $this->Session->setFlash('Please correct the errors');
            }
        }
        else {
           // prepopulate the form
           $this->request->data = $this->User->findById($id);
        }

        // populate the categories dropdown
        $this->set('categories', $this->User->Category->find('list');

    }

}

/app/views/Users/edit.ctp

<?php

echo $this->Form->create();
echo $this->Form->inputs();
echo $this->Form->end('Update');
于 2013-02-06T14:30:46.473 に答える