CakePHP查询返回两行而不是一行

时间:2017-05-20 22:24:33

标签: php mysql sql cakephp left-join

我试图将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的

1 个答案:

答案 0 :(得分:0)

您收到的内容不是两个(数据库)行,只是一个未完全分组的单行。如果您希望在主模型别名下分组所有内容,则需要使用虚拟字段。

$this->Song->virtualFields['files_with_cover'] = 'count(Song2.id)';
'fields' => array('Song.id', 'Song.cover', 'files_with_cover'),

另请参阅 Cookbook > Models > Virtual Fields