1

コメントを含む Lithium を使用して RESTful PHP Web サービスを作成しました。各コメントには親コメントを含めることができ、コメントを無限に再帰的にすることができます。

正しいキーを使用して、モデル内で関係をセットアップしました。

私のデータは現在フォーマットされていますこれをリストします(を使用Model::()):

Array
(
    [1C19FA9D-0432-A382-5236-2C59E0967F58] => Array
        (
            [id] => 1C19FA9D-0432-A382-5236-2C59E0967F58
            [page_id] => 0384F94C-8B99-F692-62D0-7B24B0885257
            [parent_id] => 
            [user_id] => 4
            [comment] => This is a test
            [created] => 2012-03-16 16:41:33
            [updated] => 
        )

    [3B2350BA-9BA7-D7D4-2ED4-42BD40BC1AF0] => Array
        (
            [id] => 3B2350BA-9BA7-D7D4-2ED4-42BD40BC1AF0
            [page_id] => 0384F94C-8B99-F692-62D0-7B24B0885257
            [parent_id] => 1C19FA9D-0432-A382-5236-2C59E0967F58
            [user_id] => 543
            [comment] => Testing
            [created] => 2012-03-16 17:25:47
            [updated] => 
        )

    [4CFD2D8B-D05F-7C8A-E2A9-38D5677280A9] => Array
        (
            [id] => 4CFD2D8B-D05F-7C8A-E2A9-38D5677280A9
            [page_id] => 0384F94C-8B99-F692-62D0-7B24B0885257
            [parent_id] => 1C19FA9D-0432-A382-5236-2C59E0967F58
            [user_id] => 53
            [comment] => A Test
            [created] => 2012-03-16 17:25:38
            [updated] => 
        )
)

そして、私はそれがこのようにフォーマットされたことを望みます

Array
(
    [0] => Array
        (
            [id] => 1C19FA9D-0432-A382-5236-2C59E0967F58
            [page_id] => 0384F94C-8B99-F692-62D0-7B24B0885257
            [parent_id] => 
            [user_id] => 4
            [comment] => This is a test
            [created] => 2012-03-16 16:41:33
            [updated] =>
            [comment] => Array(
                [0] => Array
                (
                    [id] => 3B2350BA-9BA7-D7D4-2ED4-42BD40BC1AF0
                    [page_id] => 0384F94C-8B99-F692-62D0-7B24B0885257
                    [parent_id] => 1C19FA9D-0432-A382-5236-2C59E0967F58
                    [user_id] => 543
                    [comment] => Testing
                    [created] => 2012-03-16 17:25:47
                    [updated] => 
                )
                [1] => Array
                (
                    [id] => 3B2350BA-9BA7-D7D4-2ED4-42BD40BC1AF0
                    [page_id] => 0384F94C-8B99-F692-62D0-7B24B0885257
                    [parent_id] => 1C19FA9D-0432-A382-5236-2C59E0967F58
                    [user_id] => 543
                    [comment] => A Test
                    [created] => 2012-03-16 17:25:47
                    [updated] => 
                )
            )
        )
)

Lithium に組み込まれている再帰関数はありますか、それとも自分で作成しなければならないものですか? キーの変更にも注意してください。

4

1 に答える 1

0

これを修正するために、実際には次のように結果から独自の配列を生成することになりました。

       public function index($page_id) {
            $page = Pages::first($page_id);
            $site = Sites::first($page->site_id);
            $comments = Comments::all(array('conditions' => array('page_id' => $page->id, 'comment_id' => NULL)));

            if ($this->request->type == 'JSON')
                $comments = $this->_recursiveComments($comments, $page);

            return compact('comments', 'page', 'site');
        }

        protected function _recursiveComments($comments, $page) {
            foreach($comments as $c) {
                $children = Comments::all(array('conditions' => array('comment_id' => $c->id)));
                $c->children = $children;

                $this->_recursiveComments($children, $page);
            }

            return $comments;
        }

そうすれば、foreach($comments as $key => $value)ループを実行してランダムなキーを回避できます。

于 2012-04-03T08:27:38.633 に答える