cakephp没有从表中提取数据

时间:2012-08-03 23:30:10

标签: database cakephp associations

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

帐户hambt用户,

用户hambt帐户,

帐户hasmany模板,

模板属于帐户

有accounts_templates包含id,account_id,template_id

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

有模板包含id,name,description,active

有帐户包含id,companyname,postcode,abn

有用户包含id,username,password

模板模型

<?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.'); } 
    } 

  }

2 个答案:

答案 0 :(得分: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 docs on relationships

答案 1 :(得分:0)

实际上没有你所谓的account_template模型。一个帐户有一个模板,然后一个模板有很多帐户。

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

Account Model

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

            )
        );

Template Model

public $hasMany = array(
    'Account' => array(
        'classname' => 'Account',
        'foreignKey' =>'Template_id'
        )
    );