【问题标题】:Cakephp 2 HABTM find with AND conditionsCakephp 2 HABTM 用 AND 条件查找
【发布时间】:2017-01-30 16:29:43
【问题描述】:

我正在尝试在两个表 episodesfilters 之间使用 HABTM 关联。关联表为episodes_filters。我想找到与过滤器 id 1 和 2 匹配的所有剧集。我的理解是 CakePHP 默认会执行 AND 条件,但我的努力导致返回的结果要么与剧集 id 1 或 2 匹配,要么根本没有结果。

这是我到目前为止使用代码到达的地方:

$filterConditions = array();
foreach($filterIds as $filterId ) {
    $filterConditions[] = array('EpisodesFilters.filter_id' => $filterId);
}

$episodeFilters = $this->Episode->find('all', array(
    'conditions' => array(
        'Episode.organization_id' => $this->Auth->user('organization_id'),
        'Episode.status' => $this->request->query['episode_status']
    ),
    'joins' => array(
        array('table' => 'episodes_filters',
            'alias' => 'EpisodesFilters',
            'type' => 'INNER',
            'conditions' => array(
                $filterConditions,
                'EpisodesFilters.episode_id = Episode.id'
            )
        )
    ),

));

我尝试将 JOIN 中的每个过滤器 id 设置为自己的条件,而不是像这样的数组:'EpisodesFilters.filter_id' => array(1,2),但这会导致返回带有过滤器 1 或 2 的剧集,而不是两者。

谁能帮我确定如何为 HABTM 查找设置此条件?

【问题讨论】:

    标签: cakephp cakephp-2.0 has-and-belongs-to-many


    【解决方案1】:
    foreach($filterIds as $filterId ) {
        $filterConditions['and']['EpisodesFilters.filter_id'][] = $filterId;
    }
    

    OR 没有循环

    $filterConditions['and']['EpisodesFilters.filter_id'] = $filterIds;
    

    【讨论】:

    • 此解决方案产生相同的结果,基本上返回过滤器 id 为 1 或 2 的剧集,而不是两者。
    【解决方案2】:

    首先创建您的 AND 条件数组,使其成为每个 AND 条件的新数组,分别来自您的 $filterIds var:

    foreach( $filterIds as $filter_id ) {
        $filterConditions['AND'][] = array('EpidodesFilters.filter_id' => $filter_id);
    }
    

    然后您的 find 命令中的条件项将是:

    'conditions' => array(
        'AND' => $filterConditions
    )
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多