マニュアルが示唆するように、メニューにツリー動作を使用すると思っていましたが、ますます混乱してきました。
リクエスト オブジェクトから取得できる現在のコントローラに基づいて、メニュー データを取得できるようにしたいと考えています。
次を使用して、その場でツリー動作のスコープを設定できるとしたらと思いました。
$this->behaviors()->Tree->config('scope', ['country_name' => 'France']);
そこから、次のような方法ですべてのノードを選択できると考えました。
$this->MyModel->find('all')
しかし、それはすべてを返します。
スコープはすべての操作のスコープを制限するというマニュアルを読んだので、それは混乱の領域です。
私も試しました
$this->MyModel->find('threaded')
しかし、それはすべてを返します。
ツリー全体を本来あるべき状態で返すのは良いことです。なぜなら、少なくともその一部を正しく実行したことが示されるからです。
本当に奇妙な部分はこれです:
$this->MyModel->find('children', ['for' => 1]);
スコープを設定しない限り、期待どおりの結果が返されます。スコープをIDが1のツリーに設定すると、空の配列が得られます。
要約すると。ビューセルで使用しているコードは次のとおりです。
$this->loadModel('MyModel');
$this->MyModel->behaviors()->Tree->config('scope', ['title' => 'MyTreeTitle']);
$this->MyModel->find('threaded')->toArray();
そして、前に言ったように、タイトルが定義されたスコープに一致するものだけではなく、テーブル内の 2 つの別個のツリーを返します。
また、lft と rght の値を手動でチェックして、それらが正しく、正しいように見えることを確認しました。
私は途方もなく混乱しているので、これについて何か助けていただければ幸いです。
編集
もう少しいじりましたが、上記の一部が間違っています。
の結果を出力しました
$this->MyModel->find('children', ['for' => 1]);
ツリーリストとしてスコープを設定すると、実際には子を見つけたいノードを返すだけです。スコープが一意の値に基づいて単一のノードと子を返すことを期待していました。マニュアルを数回読み直した後、スコープ値を含む行のみを返すようになりました。国->都市->ランドマークのようなものではなく、国の階層(マニュアルの場合)がない限り、ツリーデータコンテキストでそれがどのように役立つかわかりません。
これが意図された動作であるかどうか、誰にも教えてもらえますか?
また、Postgresql を使用していることにも言及する必要があります。たぶんそれが要因です。
乾杯