0

2つのテーブルがdepartmentsありusersます。にusers、次のフィールドがあります。

id | username | password | email | department | date_created

departments、私は次のフィールドを持っています:

id | name

テーブルのdepartmentフィールドはであり、テーブルの対応するフィールドを指します。Webでレンダリングしたときに、フィールドに表示される対応するものを取得するにはどうすればよいですか?これを試してみましたが、うまくいかないようです。usersINTiddepartmentsnamedepartment

class UsersController extends AppController {

    public function index() {
        $this->set('users', $this->User->find('all'));

        $departmentsArray = array();
        $departments = $this->Department->find('all');
        foreach ($departments as $department) {
            $departmentsArray[$department['Department']['id']] = $department['Department']['name'];
        }
        $this->set('departments', $departmentsArray);
    }

}

でデータを取得するために使用する予定ですView\Users\index.ctp。ただし、エラーが発生します。

Error: Call to a member function find() on a non-object 
File: D:\server\root\app\Controller\UsersController.php 
Line: 11

11行目は$departments = $this->Department->find('all');、上記で示した最初のコードブロックからのものです。

これが非常に複雑に思える場合は申し訳ありませんが、これにアプローチする簡単な方法がある場合は、教えてください。簡単に言えば、別のテーブルから定義されたIDを介してテーブル内のデータを取得する必要があります。

編集:

Hyarionからの追加情報find('all')を使用する代わりにfind('list')、コードの行を6行から1行に減らしました。:)これが新しいコードです:

class UsersController extends AppController {
    var $uses = array('User', 'Department');

    public function index() {
        $this->set('users', $this->User->find('all'));

        $this->set('departments', $this->Department->find('list'));
    }

}
4

1 に答える 1

5

部門のモデルもロードするようにコントローラーに指示する必要があります。デフォルトでは、ユーザーのみをロードしています。

これをコントローラーの上部に追加します。

var $uses = array('User', 'Department');
于 2013-03-25T15:47:47.070 に答える