0

我想用这个 CakePHP 表单来做一个左连接。请参阅CakePHP 书籍 - 关于连接表的部分

$options['joins'] = array(
    array('table' => 'channels',
        'alias' => 'Channel',
        'type' => 'LEFT',
        'conditions' => array(
            'Channel.id = Item.channel_id',
        )
    )
);
$Item->find('all', $options);

除了我的 LEFT JOIN 有一个带有条件的依赖表。在 MySQL 中,连接看起来像这样

LEFT JOIN (
    channels as Channel 
        INNER JOIN regions as Region ON ( Region.id = Channel.region_id and Region.id=1 )
) ON Channel.id = Item.channel_id

我可以使用$options['joins']语法在 CakePHP 2.0 中做同样的事情吗?

4

3 回答 3

1

所以经过一番摆弄,我发现这在 CakePHP 中起到了“把戏”的作用。根据 SQL EXPLAIN,这比使用子查询在 LEFT 连接表上强制条件要快得多

$options['joins'] = array(
    array('table' => '(channels as `Channel` INNER JOIN regions as `Region`
                      ON ( `Region`.id = `Channel`.region_id and `Region`.id=1 ))',
//        'alias' => 'Channel',  // the alias is 'included' in the 'table' field
        'type' => 'LEFT',
        'conditions' => array(
            'Channel.id = Item.channel_id',
        )
    )
);
$Item->find('all', $options);
于 2013-08-08T01:41:41.810 回答
1
$options['joins'] = array(
array('table' => 'channels',
    'alias' => 'Channel',
    'type' => 'LEFT',
    'conditions' => array(
        'Channel.id = Item.channel_id',
        'Region.id' = 1

    )
  )
);
$Item->find('all', $options);

连接选项中的条件键也可以工作

于 2013-08-08T02:02:01.367 回答
1

有点晚了,但对于像我这样通过谷歌看到这一点的人,你应该尝试以下方法。

$options['joins'] = array(
    array(
        'table' => 'channels',
        'alias' => 'Channel',
        'type' => 'LEFT',
        'conditions' => array(
            'Item.channel_id = Channel.id'
        )
    ),
    array(
        'table' => 'regions',
        'alias' => 'Region',
        'type' => 'INNER',
        'conditions' => array(
            'Channel.region_id = Region.id',
            'Region.id = 1'
        )
    )
);
于 2014-09-16T11:31:19.553 回答