2011-11-14 44 views
1

我有三个数据库表,newsnews_n_typesn_typescakephp - 带有标记类型的邻居记录

n_types表中填充了不同类型的新闻标签。

news_n_types表格图n_typesnews

新闻发布可以属于许多不同的新闻类型。我试图找到一个新的类型的新闻帖子的邻居。

到目前为止,如果我尝试以下所有工作,但它搜索任何新闻帖子,而不仅仅是那种类型。

$this->News->bindModel(array('hasOne' => array('NewsNType'))); 
     $neig = $this->News->find('neighbors', array(
      'fields' => array('News.*') 
     )); 

如果我添加一个条件来过滤消息类型我收到一个SQL错误(SQL错误: 'where子句' 未知列 'NewsNType.n_type_id':1054)

$this->News->bindModel(array('hasOne' => array('NewsNType'))); 
     $neig = $this->News->find('neighbors', array(
      'fields' => array('News.*'), 
      'conditions' => array('NewsNType.n_type_id' => $typeID) 
     )); 

上午什么我做错了?每个请求

更新查看数据后,从第一个查询返回,它也可能无法工作,因为它永远不会返回之前。

应用程序/控制器/ 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 
          ) 

        ) 

      ) 

    ) 

+0

你可以发布第一个查询返回的数据的例子吗? –

+0

@David Gallagher我添加了更多信息 – Paramount

+0

下一个有id 1我不会指望有prev。我更关心的是,你的下一个没有NewsNType。 –

回答

1

经过一些测试我找到了 以这种方式使用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)); 
0

根据文档

[find('neighbors')] does not honor a model’s default recursive var. The recursive setting must be passed in the parameters on each call.

尝试使用:

$neig = $this->News->find('neighbors', array(
     'fields' => array('News.*'), 
     'conditions' => array('NewsNType.n_type_id' => $typeID), 
     'recursive' => 1 
    )); 
+0

在递归设置为1后,我更新了第一篇文章的结果。 – Paramount