我有三个数据库表,news
, news_n_types
和n_types
。
n_types
表中充满了不同类型的新闻标签。
news_n_types
表将n_types
映射到news
。
一个新闻帖子可以属于许多不同的新闻类型。我正试图找到一篇新类型的新闻帖子的邻居。
到目前为止,如果我尝试以下一切工作,但它搜索任何新闻帖子,而不仅仅是那种类型的。
$this->News->bindModel(array('hasOne' => array('NewsNType')));
$neig = $this->News->find('neighbors', array(
'fields' => array('News.*')
));
如果我添加一个条件来过滤新闻类型,我收到一个sql错误(sql error: 1054: Unknown column 'NewsNType。N_type_id ' in 'where子句')
$this->News->bindModel(array('hasOne' => array('NewsNType')));
$neig = $this->News->find('neighbors', array(
'fields' => array('News.*'),
'conditions' => array('NewsNType.n_type_id' => $typeID)
));
我做错了什么?
每次请求更新
查看从第一个查询返回的数据后,它也可能无法工作,因为它从不返回前一个。
app/controllers/news_controller.php(第102行)
Array
(
[prev] =>
[next] => Array
(
[News] => Array
(
[id] => 1
[title] => TEST 1
[date] => 1319935806
[body] => TEST 1
[excerpt] => TEST 1
)
[NType] => Array
(
[0] => Array
(
[id] => 1
[label] => Blog
[slug] => blog
[NewsNType] => Array
(
[id] => 25
[news_id] => 1
[n_type_id] => 1
)
)
[1] => Array
(
[id] => 2
[label] => Industry News
[slug] => industry_news
[NewsNType] => Array
(
[id] => 26
[news_id] => 1
[n_type_id] => 2
)
)
)
)
)
经过一些测试,我发现当以这种方式使用find('neighbors')
时,不可能在另一个表上使用条件。您需要执行连接:
$joins = array(
array('table' => 'news_n_types',
'alias' => 'NewsNType',
'type' => 'LEFT',
'conditions' => array(
'NewsNType.news_id = News.id',
)
)
);
$conditions = array('NewsNType.n_type_id' => $typeID);
$neig = $this->News->find('neighbors', array('field' => 'id', 'value' => 1, 'joins' => $joins, 'conditions' => $conditions));
根据文档
[find('neighbors')]不支持模型的默认递归变量递归设置必须在每次调用时的形参中传递。
尝试使用:
$neig = $this->News->find('neighbors', array(
'fields' => array('News.*'),
'conditions' => array('NewsNType.n_type_id' => $typeID),
'recursive' => 1
));