2

マニュアルが示唆するように、メニューにツリー動作を使用すると思っていましたが、ますます混乱してきました。

リクエスト オブジェクトから取得できる現在のコントローラに基づいて、メニュー データを取得できるようにしたいと考えています。

次を使用して、その場でツリー動作のスコープを設定できるとしたらと思いました。

$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 を使用していることにも言及する必要があります。たぶんそれが要因です。

乾杯

4

1 に答える 1