在尝试构建它时,我被我忽略(或根本上被误解!)的东西所困扰:
Accounts HABTM Users
和Administrators belongsTo Accounts
,其中Administrator
是 的别名User
。
我在 RDBMS 上非常糟糕,所以要进一步澄清:
帐户字段: id, name, administrator_id, etc.
用户字段: id, name, dob, etc.
AccountsUsers 字段: id, user_id, account_id
至于模型关联,我有:
用户
public $hasOne = array(
'Account' => array(
'className' => 'Account',
'foreignKey' => 'administrator_id'
)
);
public $hasAndBelongsToMany = array(
'Account' =>
array(
'className' => 'Account',
'joinTable' => 'users_accounts',
'foreignKey' => 'user_id',
'associationForeignKey' => 'account_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'with' => ''
)
);
账户
public $belongsTo = array(
'Administrator' => array(
'className' => 'User',
'foreignKey' => 'id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasAndBelongsToMany = array(
'User' => array(
'className' => 'User',
'joinTable' => 'users_accounts',
'foreignKey' => 'account_id',
'associationForeignKey' => 'user_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
)
);
但是,我的Accounts
控制器被烘烤以产生如下代码:
$this->Administrator->find('list');
但是当然没有管理员的控制器,所以我只剩下:
错误:在非对象
文件上调用成员函数 find(): path/to/app/Controller/AccountsController.php
我已经独立设置了 ACL;在这种情况下,“管理员”在授权方面并不是代表一类用户,而只是关联——它可能更像是“所有者”。我没有理由为他们创建一个单独的模型,我只是想将创建帐户的一个用户与将使用它的其他用户区分开来(当然,创建者几乎肯定也会使用它)。我很乐意以Accounts
. user_id
如果这不会导致问题,则在数据库上,但它似乎(对我来说)必然。
另一个问题是我似乎无法UsersController
使用
$this->User->saveAssociated($this->request->data)
.
这是我的视图文件:
<?php echo $this->Form->create('User', array('action' => "register/$token_id/$group_id/$account_id")); ?>
<fieldset>
<legend><?php echo __('Registration'); ?></legend>
<?php
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->input('firstname');
echo $this->Form->input('lastname');
echo $this->Form->input('claimed', array('type'=>'hidden', 'value'=>1));
echo $this->Form->input('studentno');
echo $this->Form->input('UsersAccount.account_id', array('type'=>'hidden', 'value'=>$account_id));
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
我的理解saveAssociated()
正是为了避免手动执行以下操作:
$UserId = $this->User->getLastInsertID();
$AccountId = $this->request->data['UsersAccount']['id'];
$this->User->loadModel('UsersAccount');
$this->UsersAccount->create();
$this->UsersAccount->save(array('UsersAccount' => array(
'user_id' => $UserId,
'account_id' => $AccountId)
));
我确信我的错误主要在于理解关系(即这里存在逻辑问题,而不是语法问题)。我已经相当广泛地阅读了 Cake 手册,但我就是不知道 Cake 是如何做到这一点的,我宁愿学习正确的方法,也不愿构建绕过 Cake 优雅的 hack。因此,非常感谢您的帮助。:)