我在与 CakePHP HABTM 的关系上有点挣扎,我在尝试做一个看似简单的任务时遇到了困难。我有许多营地和许多新闻项目。每个 NewsItem 都可能与任何阵营相关,因此当用户创建 NewsItem 时,他们会检查该项目用于哪些阵营。这就是想法。
所以...
我想在我的 NewsItems 视图中加入一些营地过滤。换句话说,我想查看与营地“A”和营地“B”相关的所有新闻项目。
向“查找”和“分页”功能添加条件就像一个魅力。
然而...
如果一个 NewsItem 属于多个 Camp,它会在列表中出现多次。因此,当我告诉 find 给我属于“A”阵营和“B”阵营的所有 NewsItems 时,属于“A”阵营和“B”阵营的 NewsItem 将出现两次。
调试查询如下所示:
选择
NewsItem
。id
,NewsItem
.user_id
,NewsItem
.heading
,NewsItem
.body
,NewsItem
.modified
,User
.first_name
FROMnews_items
ASNewsItem
LEFT JOINusers
ASUser
ON (NewsItem
.user_id
=User
.id
) LEFT JOINcamps_news_items
ASCampsNewsItem
ON (CampsNewsItem
.news_item_id
=NewsItem
.id
) WHERECampsNewsItem
。camp_id
在 (1, 5) 中排序NewsItem
。modified
描述限制 10选择
Camp
。id
,Camp
.name
,Camp
.created
,Camp
.modified
,CampsNewsItem
.camp_id
,CampsNewsItem
.news_item_id
从camps
ASCamp
JOINcamps_news_items
ASCampsNewsItem
ON (CampsNewsItem
.news_item_id
IN (6, 6, 7, 8) ANDCampsNewsItem
.camp_id
=Camp
.id
) WHERE 1 = 1
php 代码如下所示:
$camp_ids = array(1, 3, 6, 10);
$conditions = array('CampsNewsItem.camp_id' => $camp_ids);
$params['conditions'] = $conditions;
$this->NewsItem->bindModel(array('hasOne' => array('CampsNewsItem')));
$news_items = $this->NewsItem->find('all', $params);
感谢您的任何见解!