前提・実現したいこと
すいません、初歩的な質問かもしれませんがお許しください。
今までベタのSQL文を使用してアプリを作成しておりましたが、
今回初めてCakePHP3.7.5を使用してアプリを作成する事になったのですが
find関数の記載方法についてネットを調べても分からなかった為、
質問する事にしました。
例えば下記のsampleというテーブルがあったとしてSampleという Modelを用意しているします。 id | sid | res | title | modified ――――――――――――――――――――――――――――――――――――――― 1 | 1 | 0 | aaaaa | 2019/05/20 2 | 1 | 1 | bbbbb | 2019/05/27 3 | 2 | 0 | ccccc | 2019/05/20 4 | 3 | 0 | ddddd | 2019/05/20 5 | 4 | 0 | eeeee | 2019/05/20 6 | 4 | 1 | fffff | 2019/05/27 resというカラムの合計値を新たなカラムとしてsidで集計し取得したい場合 単純なSQLだと下記の記載で4件取得可能な事は確認出来ているのですが find関数を使用した記載方法が分からず悩んでいます SELECT id, sid, sum(res) as resCount, res, title, modified FROM sample GROUP BY sid ORDER BY modified desc, sid desc ↓こんな感じに取得したい id | sid | res | resCount | title | modified ――――――――――――――――――――――――――――――――――――――――――――――――――― 1 | 4 | 0 | 1 | eeeee | 2019/05/20 5 | 1 | 0 | 1 | aaaaa | 2019/05/20 3 | 3 | 0 | 0 | ddddd | 2019/05/20 4 | 2 | 0 | 0 | ccccc | 2019/05/20
試したこと
cakephp2をご存知の方からはfieldsを使用すれば良いのでは?
と伺いcakephp3.5以降での記載方法をネットで調べチャレンジしてみましたが
resCountというカラムのみ取得出来ませんでした。
var_dumpでSQL文を確認したところselect文としては正しく形成されている
感じでしたが実際の値としてresCountというカラムが取得出来ませんでした。
そもそも下記のような記載自体間違っている可能性もありますが
find関数での記載方法についてどなたかご教授お願いいたします。
$query = $this->Sample->find() ->applyOptions([ 'fields' => [ 'id' => 'id', 'sid' => 'sid', 'res' => 'res', 'resCount' => 'sum(resId)', 'title' => 'title', 'modified' => 'modified' ], ]) ->where(['resId =' => 0]) ->group(['sid']) ->order(['modified' => 'desc','sid' => 'desc']);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/03 11:43
2019/06/03 11:55
2019/06/03 12:26