我一直在努力学习协会,特别是很多人,因为根据cakephp文档,这对我的需求是最好的。
我有三张桌子
drugs
id | drug
5 | reality
records
id | user_id | a-couple-misc-fields
1 | 1 |
record_drugs
id | drug_id | record_id
1 | 5 | 1
我也有3个模特
//Drug.php
public $hasMany = array('RecordDrug');
//Record.php
public $hasMany = array('RecordDrug');
//RecordDrug.php
public $belongsTo = array('Record', 'Drug');
在我这之前,我只有一个表'记录',而不是' drug_id '只是'药物'将是“现实”。这种方法显然有效,但我知道这种方法从长远来看不会起作用。
我的旧查询
$records=$this->Record->find('list',
array('fields' => array('drug', 'sum'),
'group' => 'drug',
'conditions' => array('user_id' => $this->Auth->user('id'))));
如果我要运行这个完全相同的查询并使用' drug_id '而不是' drug ',我会得到一个类似这样的数组:< / p>
'5' => '1' // The Drug => The Count of the Drug
但我需要它显示如下:
'Reality' => '1'
我理解这个问题是否很复杂以获得帮助,但如果有人有任何资源或链接,我可以查看这将有助于我,这将是惊人的!谷歌搜索只会告诉我如何设置连接模型,而不是如何实际使用它和检索数据。
编辑:
$this->loadModel('RecordDrug');
$this->RecordDrug->virtualFields['sum'] ='COUNT(*)';
$records=$this->RecordDrug->find('list',
array('fields' => array('drug_id', 'sum'),
'group' => 'drug_id'
));
$this->set('output',$records);
debug($records);
这主要是给了我想要的东西;
array(
(int) 1 => '1',
(int) 2 => '2'
)
我现在唯一需要做的就是弄清楚如何将第一个值更改为与id相关的实际“药物”。
ANSWER
因此,我试着将drug_id与实际药物联系起来,这就是我让它正确显示给我的方式:
$this->RecordDrug->virtualFields['sum'] ='COUNT(*)';
$records=$this->RecordDrug->find('list',
array('fields' => array( 'Drug.drug', 'sum'),
'contain' => array('Drug', 'Record'), //Record is only here if you need the condition, you can remove record complete and the condition completely and it'll still work, but it'll give you ALL the results rather then just yours
'group' => 'Drug.Drug',
'conditions' => array('Record.user_id' => $this->Auth->user('id'))
));