0

私は関連付けを学習しようとしてきましたが、特に hasMany を通じて、cakephp のドキュメントによると、それが私のニーズに最適であるためです。

私は3つのテーブルを持っています

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');

これを取得する前は、テーブル ' records ' が 1 つしかありませんでした。このテーブルには、' drug_id 'の代わりに単に ' drug ' が含まれており、これが ' reality ' になります。その方法は明らかにうまくいきましたが、その方法が長期的にはうまくいかないことはわかっています。

私の古いクエリ

$records=$this->Record->find('list', 
        array('fields' => array('drug', 'sum'),
            'group'  => 'drug',
            'conditions' => array('user_id' => $this->Auth->user('id'))));

これとまったく同じクエリを実行して、「 Drug 」の代わりに「 Drug_id 」を使用すると次のような配列が得られます。

'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 に関連付けられた実際の「薬物」に変更する方法を見つけることだけです。

答え

したがって、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'))
            ));   
4

0 に答える 0