前提を確認させてください。
A (hasMany)-> C (hasMany)-> Dという順番で結合しています。
CテーブルはAとDを繋ぐためのテーブル
Dテーブルはワークテーブル ですね!
CREATE TABLE A_muster (
id int(11) NOT NULL,
name varchar(48) DEFAULT NULL,
PRIMARY KEY (id)
)
CREATE TABLE C_tbl (
a_id int(11) NOT NULL,
d_id int(11) DEFAULT NULL,
PRIMARY KEY (a_id)
)
CREATE TABLE D_trn (
trn_id int(11) NOT NULL,
id int(11) DEFAULT NULL,
PRIMARY KEY (trn_id)
)
サンプルのデータ
A_muster
id   name
1    NM1
2    NM2
3    NM3
4    NM4
5    NM5
C_tbl
a_id  d_id
1      11
2      12
3      13
4      14
5      15
D_trn
trn_id id
101    11
102    11
103    12
104    13
105    14
106    14
これからAに対するDの数は
SELECT
A.id,
A.name,
count(D.id)
FROM
A_muster AS A
inner JOIN C_tbl AS C ON  A.id = C.a_id
left JOIN D_trn AS D ON C.d_id = D.id
group BY A.id
で
Aid  A.名称  D.件数
1	NM1	2
2	NM2	1
3	NM3	1
4	NM4	2
5	NM5	0
もしも 0件を 数えないなら
SELECT
A.id,
A.name,
count(D.id)
FROM
A_muster AS A
inner JOIN C_tbl AS C ON  A.id = C.a_id
inner JOIN D_trn AS D ON C.d_id = D.id
group BY A.id
ですが いかがでしょうか
cakePHP3では
use Cake\Datasource\ConnectionManager;
<?php
// DB接続を取得
$connection = ConnectionManager::get('default');
// SQL
$sql = 'SELECT A.id,A.`name`,count(D.id) AS cnt';
$sql.= 'FROM A_muster AS A ';
$sql.= 'inner JOIN C_tbl AS C ON  A.id = C.a_id ';
$sql.= 'left JOIN D_trn AS D ON C.d_id = D.id ';
$sql.= 'group BY A.id ';
//  実行
$query = $connection->execute($sql)->fetchAll('assoc');
foreach ($query as $row) {
?>
            <td><?= $row['id'] ?></td>
            <td><?= $row['name'] ?></td>
            <td><?= $row['cnt'] ?></td>
<?php 
}
 ?>
で できます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/22 04:35