こんにちは。
簡単なのですが、忘れないようにメモ。
CREATE TABLE `tag_masters` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL COMMENT 'タグ名', `created` timestamp NOT NULL COMMENT '登録日', `modified` timestamp NOT NULL COMMENT '更新日', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `tag_relations` ( `tag_id` int(11) unsigned NOT NULL COMMENT 'タグID', `item_id` int(11) unsigned NOT NULL COMMENT 'アイテムID', `created` timestamp NOT NULL COMMENT '登録日', PRIMARY KEY (`tag_id`,`item_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
こんな感じのタグテーブルがあったとして、cakephpのpaginateでデータを取ってきたい時に、各タグの紐づけ数を一緒に取るときはこんな感じになるようです。
<?php $this->paginate = [ 'fields' => [ 'TagMaster.id', 'TagMaster.name', 'TagMaster.created', 'TagMaster.modified', 'TagMaster__count' => "(SELECT count(l.tag_id) FROM tag_relations AS l WHERE TagMaster.id = l.tag_id)" ] ];
cakephpがDBにSQLを発行する際、各カラムをEntity名__カラム名で別名を貼って発行するので、その命名に沿って指定すれば取れるってことでした。
良かった。解決。