我试图将SQL查询转换为CakePHP查询。在SQL查询返回一行的情况下,CakePHP查询返回2行,列 id & 封面在第一行&第二个是 files_with_cover 。 当然,我喜欢所有列的一行。
SQL查询:
SELECT s1.id, s1.cover, COUNT(s2.id) files_with_cover FROM songs s1 LEFT JOIN songs s2 ON s2.cover=s1.cover WHERE s1.source_path=$path
CakePHP查询:
$result = $this->Song->find('first', array(
'joins' => array(
array(
'table' => 'songs',
'alias' => 'Song2',
'type' => 'LEFT',
'conditions' => array('Song2.cover = Song.cover')
)
),
'fields' => array('Song.id', 'Song.cover', 'count(Song2.id) as files_with_cover'),
'conditions' => array('Song.source_path' => $file)
));
编辑,示例数据集:
id cover source_path
-----------------------
1 image1 /example/1
2 image1 /example/2
3 image1 /example/3
4 image2 /example/4
使用条件source_path" / example / 1"进行选择时我想要以下结果: id = 1,cover = image1,files_with_cover = 3。
$ result数组的打印输出可能会给出一个线索。不确定为什么files_with_cover列最终会在一个单独的行中结束。
Array
(
[Song] => Array
(
[id] => 1
[cover] => cover1.jpeg
)
[0] => Array
(
[files_with_cover] => 3
)
)
使用CakePHP 2.8.1& MySQL的
答案 0 :(得分:0)
您收到的内容不是两个(数据库)行,只是一个未完全分组的单行。如果您希望在主模型别名下分组所有内容,则需要使用虚拟字段。
$this->Song->virtualFields['files_with_cover'] = 'count(Song2.id)';
'fields' => array('Song.id', 'Song.cover', 'files_with_cover'),