0

次のテーブルがあるとしましょう:categorys、posts、categories_posts。カテゴリはツリーとして機能します。Category と Post の間には習慣があります。

投稿コントローラーからやりたいことは、特定の投稿を見つけて、それが属するカテゴリをスレッド/ネスト形式でリストすることです。

一時的な解決策: (私のコーディングはおそらくかなり貧弱です - 申し訳ありません)

public function view($id=null) {
    $this->Post->id = $id;
    if($this->Post->exists()) {
        $data = $this->Post->read();
        $data['Category'] = $this->_thread($data); 
        $this->set(compact('data'));
    }
}

public function _thread($data, $parent_id=null) {
    $out = array();
    $parents = Set::extract("/Category[parent_id={$parent_id}]", $data);
    foreach($parents as $k => $item) {
        $out[$k] = $item;
        $out[$k]['Category']['children'] = Set::extract("/Category[parent_id={$item['Category']['id']}]", $data);
        foreach($out[$k]['Category']['children'] as $key => $child) {
            $out[$k]['Category']['children'][$key]['Category']['children'] = $this->_thread($data, $child['Category']['id']);
        }
    }
    return $out;
}
4

1 に答える 1

0

これはあなたを助けるかもしれません:

$data = $this->Post->find('threaded', array(
    'conditions' => array('id' => 1)
));

「条件」配列は、たとえば、必要な条件があれば渡すことができます。

于 2012-08-29T08:14:27.870 に答える