0

有人可以为我解释一下吗?

我有一个数据库,我试图从一个页面更新 4 个表,Organizations、OrganizationsDetails、Account、AccountRoles。添加视图本身将包含帐户和组织的字段。当我调用 OrganizationsController 添加函数时,我想在 AccountController、AccountRolesController(将 Account 设置为管理员角色)和 OrganizationDetailsController(将该 Account 设置为该特定组织的管理员)上调用 add。

我应该为此使用组件吗?当我在 Organizations 上调用 add() 时,我总是打算执行这些步骤 - 永远不要单独创建下面的 Organizations 条目。我应该直接在那个函数或其他方法中执行此操作吗?

如果我需要更多解释,请告诉我,谢谢!

编辑:添加了以下四个模型:组织

class Organization extends AppModel {
    public $hasMany = array(
        'Account' => array(
            'className' => 'Account',
            'foreignKey' => 'organization_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
    public $hasOne = array(
        'OrganizationDetail' => array(
            'className' => 'OrganizationDetail',
            'foreignKey' => 'organization_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

组织详情

class OrganizationDetail extends AppModel {
    public $belongsTo = array(
        'Organization' => array(
            'className' => 'Organization',
            'foreignKey' => 'organization_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Account' => array(
            'className' => 'Account',
            'foreignKey' => 'account_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

帐户角色

class AccountRole extends AppModel {

    public $belongsTo = array(
        'Account' => array(
            'className' => 'Account',
            'foreignKey' => 'account_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Role' => array(
            'className' => 'Role',
            'foreignKey' => 'role_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

帐户

class Account extends AppModel {
    public $belongsTo = array(
        'Organization' => array(
            'className' => 'Organization',
            'foreignKey' => 'organization_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

    public $hasOne = array(
        'OrganizationDetail' => array(
            'className' => 'OrganizationDetail',
            'foreignKey' => 'account_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

    public $hasMany = array(
        'AccountRole' => array(
            'className' => 'AccountRole',
            'foreignKey' => 'account_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
4

1 回答 1

0

你错了整个 MVC 的想法。控制器不应该调用其他控制器中的方法(或者至少在这种情况下不应该)。

正确的方法是设置 OrganizationsController->add() 以便通过独立调用每个 Model->save($data) 或使用

Organization->saveAssociated($data,array('deep' => true))

您的表单字段需要正确命名才能正常工作。例如:

echo $this->Form->create('Organization', array('action' => 'add'));
echo $this->Form->input('Organization.name'));
echo $this->Form->input('Account.0.name', array('label' => 'Account name'));
echo $this->Form->input('OrganizationDetail.details', array('label' => 'Org. Details'));
echo $this->Form->input('Account.0.AccountRole.id', array('label' => 'Account Role'));
echo $this->Form->end('Add');

但是,如果您尝试深入太多级别,您可能会遇到麻烦。如果您发现自己处于这种情况,可能是因为您的数据模型存在缺陷。

这是您的数据模型当前的样子:

数据模型

这就是我认为它应该看起来的样子:

标准化数据模型

在开始编码之前拥有数据模型至关重要。它可以为您省去很多麻烦!

于 2015-11-28T11:57:47.537 回答