2011-11-14 12 views
1

私は3つのデータベーステーブルnews,news_n_types、およびn_typesを持っています。cakephp - タグタイプの隣接レコード

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エラー:1054: 'where句' 内の不明な列 'NewsNType.n_type_idを')

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

何午前私は間違っている?要求

あたり

アップデートは前を返すことはありませんように第1のクエリから返されたデータを見ていたら、それはあまりにも、作業することはできません。

アプリ/コントローラ/ 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を持っているので、私は前にあるとは思いません。私が心配しているのは、あなたの次の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