我有一个创建发票的表单,发件人和收件人表单输入来自数据库中的可用列表。
accounts(id,...., company_name, abn) ---> id is primary
users(id, username, title, firstname, surname,...) ---> id is primary
accounts_users(id, account_id, user_id) --->account_id from accounts, user_id from users
每个用户只能属于一个帐户,但一个帐户可以拥有多个用户。 表单输入是account_id,具体取决于登录用户的身份。
在发票控制器中:
$accounts3=$this->User->AccountsUser->find('list', array(
'fields'=>array('account_id','account_id'),'conditions' => array(
'user_id' => $this->Auth->user('id'))));
$accounts=$this->User->Relationship->find('list', array('fields'=>array('receiver_id'),'conditions' => array('sender_id' => $accounts2)));
在addInvoice视图中:
<?php
echo $this->Form->create('Invoice', array('action'=>'addinvoice'));
echo $this->Form->input('sender_id',array('label'=>'Sender: ', 'options' => array('$accounts3' => 'COMPANY NAME')));
echo $this->Form->input('receiver_id',array('label'=>'Receiver: ', 'type' => 'select', 'options' => $accounts));
echo $this->Form->input('active', array('label' => 'Schedule?', 'options' => array('1'=>'Send','0'=>'Schedule'), 'default'=>'1'));
echo $this->Form->hidden('templates_id', array('default'=>'0'));
echo $this->Form->end('Submit');
公司名称的标签&#39;在这种情况下是硬编码的,需要用动态标签替换,该标签来自company_name
表格accounts
。
有点复杂,接收者标签必须是来自company_name
的{{1}},或accounts
是company_name
,(所以他们是个人的,不是商家帐户)NULL
来自username
。
尝试的解决方案:
***在users
$sendername
变量
InvoicesController
OR
$sendername=$this->User->Account->find('list', array('fields'=>array('company_name'),'conditions' => array('account_id' => $accounts3)));
那些似乎不起作用,想知道它在CakePHP中是否可行?
答案 0 :(得分:0)
$accounts3 = $this->User->AccountsUser->Account->find('list', array(
'fields' => array('company_name'),
'joins' => array(
array(
'alias' => 'AccountsUser',
'table' => 'accounts_users',
'type' => 'left',
'conditions' => array('AccountsUser.account_id = Account.id'),
)
),
'conditions' => array(
'AccountsUser.user_id' => $this->Auth->user('id'),
)
));
// find all accounts with id => label from accounts table
// where AccountsUser.user_id = id of logged in user
// label being user.username when company_name is null or company_null if not null
$this->User->AccountsUser->Account->virtualFields['label'] = 'CASE WHEN Account.company_name IS NULL THEN User.username ELSE Account.company_name END';
$accounts = $this->User->AccountsUser->Account->find('list', array(
'fields' => array('label'),
'joins' => array(
array(
'alias' => 'AccountsUser',
'table' => 'accounts_users',
'type' => 'left',
'conditions' => array('AccountsUser.account_id = Account.id'),
),
array(
'alias' => 'User',
'table' => 'users',
'type' => 'left',
'conditions' => array('AccountsUser.user_id = User.id'),
),
),
'conditions' => array(
'AccountsUser.user_id' => $this->Auth->user('id'),
)
));
不确定这是否是您想要的,如果我理解正确的问题,但希望它会给你一些东西。