1

Cakephp で問題が発生し、SQL クエリを作成しています。SQL コードを書き出しましたが、cake でコーディングする方法がわかりません。

`users`          - id, name, address
`accounts`       - id, companyname, abn
`accounts_users` - id, account_id, user_id
`templates`      - id, name, description, account_id
`fields`         - id, name, description, template_id
  • ユーザーの habtm アカウント
  • アカウント habtm ユーザー
  • アカウントには多くのテンプレートがあります
  • テンプレートの所属アカウント
  • テンプレートには多くのフィールドがあります
  • フィールドの所属テンプレート

fieldscontroller で find ステートメントを取得しようとしているのは、template_id フィールドを追加することです。

select t.id
from  template.t, account_users.au, user.u
where t.account_id=au.account_id AND
au.user_id=users.id;

これは、これまでコントローラーのフィールドにあるコードです。

function add() {
    $this->Session->setFlash("Please create your required fields.");
    $templates = $this->Template->find('list', array(
        'fields' => array('id'),
        'conditions' => array('id'=> $this->Auth->user('id'))));
    $this->set('templates','$templates');

    if($this->request->is('post')) {
        $this->Field->create(); 

        if ($this->Field->save($this->request->data)) {     
            if ($this->request->data['submit'] == "type_1") { 
                $this->Session->setFlash('The field has been saved');  
                $this->redirect(array(
                    'controller' => 'fields',
                    'action' => 'add'));
            } 
            if ($this->request->data['submit'] == "type_2") {
                $this->Session->setFlash('The template has been saved'); 
                $this->redirect( array('controller' => 'templates','action' => 'index'));
            }
        } else {
            $this->Session->setFlash('The field could not be saved. Please, try again.'); 
        }
    }
}

現在出力されているSQLステートメントは

SELECT `Template`.`id` FROM `pra`.`templates` AS `Template` WHERE `id` = 14

idusersテーブルIDを参照しています

エラーは、追加フォームで template_id を取得しようとしていることです。find 関数は template_id を取得していません。代わりにユーザー ID を取得しています。

4

1 に答える 1