1

私のウェブサイト/データベースは、ユーザーがアカウントを作成するように設定されているため、ユーザーがアカウントを作成すると、データが accounts_users テーブルに保存されます。ユーザーが (users テーブルの情報を使用して) ログインし、テンプレートを作成します。問題は、accounts_templates テーブルが accounts_users テーブルからアカウント ID を取得せず、データベース エラーが発生することです。

アカウント hambt ユーザー、

ユーザー hambt アカウント、

アカウントには多くのテンプレートがあり、

テンプレートはアカウントに属します

id、account_id、template_id を含む accounts_templates があります

id、account_id、user_id を含む accounts_users があります

ID、名前、説明、アクティブを含むテンプレートがあります

ID、会社名、郵便番号、abn を含むアカウントがあります

ID、ユーザー名、パスワードを含むユーザーがいます

テンプレートモデル

<?php
    class Template extends AppModel{ 
    var $name='Template'; 
    public $useTable = 'templates';
    public $primaryKey = 'id';

    public $belongsTo = array(
        'Account' => array(
            'classname' => 'Account',
            'foreignKey' =>'account_id'
            )
        );
    }

アカウント テンプレート

var $hasMany = array(
        'Template' =>
            array(
                'className'=>'Template',
                'foreignKey'=>'account_id',
                )
            );

テンプレートコントローラーから関数を追加

function add(){

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

    $this->Template->create(); 

    if ($this->Template->save($this->request->data)) 
    { 
        $this->Session->setFlash('The template has been saved');
        $this->redirect( array('controller' => 'Fields','action' => 'add'));

    }
    else { $this->Session->setFlash('The template could not be saved. Please, try again.'); } 
    } 

  }
4

2 に答える 2

0

私はあなたのデータベースを見ることができませんが、あなたの質問から判断すると、いくつかのエラーがあるかもしれません:

user_accounts

Cakephpの結合テーブルの名前として間違っています。そのはず:

accounts_users

複数形およびアルファベット順。

account_templates結合テーブルを作成する場合、それはアカウントHABTMテンプレートを意味します。あなたはそれがHasManyだと言いました。それはHasManyであり、結合テーブルは必要ありません。または、HABTMであり、モデルでそのように言う必要があります。

編集:わかりました。あなたの質問であなたは書きます:

accounts_templates which contains id, accounts_id, templates_id

そのはず:

id, account_id, template_id

特異な。

関係に関するcakephpドキュメント

于 2012-08-04T00:13:46.563 に答える
0

実際、account_template モデルと呼ばれるものはありません。1 つのアカウントには 1 つのテンプレートがあり、1 つのテンプレートには複数のアカウントがあります。

したがって、このタスクには、アカウントとテンプレートの 2 つのモデルが必要です。

Account Model

var $hasOne = array(
    'Template' =>
        array(
            'className'=>'Template',

            )
        );

Template Model

public $hasMany = array(
    'Account' => array(
        'classname' => 'Account',
        'foreignKey' =>'Template_id'
        )
    );
于 2012-08-04T00:32:40.767 に答える