1

我的网站/数据库设置为用户 habtm 帐户,因此当一个人创建一个帐户时,一个用户将数据保存在 accounts_users 表中。一个人登录(使用用户表中的信息)并创建一个模板,问题是accounts_templates 表没有从accounts_users 表中提取accountid,它引发了数据库错误。

帐户hambt用户,

用户hambt帐户,

账户有很多模板,

模板属于帐户

有accounts_templates,其中包含id、account_id、template_id

有accounts_users,其中包含id、account_id、user_id

有包含 id、name、description、active 的模板

有包含 id、companyname、postcode、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

复数和按字母顺序排列。

如果创建了accounts_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 模型。一个帐户有一个模板,然后一个模板有多个帐户。

因此,对于此任务,您应该有两个模型:帐户和模板

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 回答