我应该如何在模型中声明我的树行为以在CakePHP 2.5.x中保留作用域?

我应该如何在模型中声明我的树行为以在CakePHP 2.5.x中保留作用域?,cakephp,cakephp-2.5,Cakephp,Cakephp 2.5,我很简单:我想根据它们各自的菜单id管理多个(链接)树。只要只有一棵树:没问题。当我在链接模型中用不同的菜单id启动另一棵树时,事情就会变得一团糟 我希望能够在保留范围(菜单id)的同时添加、编辑、删除、上移或下移。 我不清楚文件的这一部分: 这里是我的链接模型 <?php App::uses('AppModel', 'Model'); class Link extends AppModel { public $name = 'Link'; public $disp

我很简单:我想根据它们各自的菜单id管理多个(链接)树。只要只有一棵树:没问题。当我在链接模型中用不同的菜单id启动另一棵树时,事情就会变得一团糟


我希望能够在保留范围(菜单id)的同时添加、编辑、删除、上移或下移。 我不清楚文件的这一部分:

这里是我的链接模型

<?php
App::uses('AppModel', 'Model');

class Link extends AppModel {

    public $name = 'Link';

    public $displayField = 'title';

    public $actsAs = array('Tree' => array(
        'parent' => 'parent_id',
        'left' => 'lft',
        'right' => 'rght',
        'scope' => "WHAT-SHOULD-I-PLACE-HERE??",
    ));

    public $belongsTo = array(
        'Menu' => array(
            'className' => 'Menu',
            'foreignKey' => 'menu_id',
        )
    );
}

范围基本上是一个SQL条件(蛋糕格式)

因此,您可能需要将作用域设置为所需的菜单ID

'scope' => array(
    'Link.menu_id' => 5
);
但是,在尝试在类定义上设置数组时,您可能还不知道是哪个ID,因此您可能需要动态地进行设置

$this->Link->Behaviors->attach('Tree', array(
    'scope' => array(
        'Link.menu_id' => $id  // You need to decide how to get this ID
    ),
));
我不知道你什么时候需要这么做。由您决定何时附加该行为


编辑:如果moveUp/moveDown方法工作不正常,可能是您使用的范围字段不正确?

范围基本上是SQL条件(蛋糕格式)

因此,您可能需要将作用域设置为所需的菜单ID

'scope' => array(
    'Link.menu_id' => 5
);
但是,在尝试在类定义上设置数组时,您可能还不知道是哪个ID,因此您可能需要动态地进行设置

$this->Link->Behaviors->attach('Tree', array(
    'scope' => array(
        'Link.menu_id' => $id  // You need to decide how to get this ID
    ),
));
我不知道你什么时候需要这么做。由您决定何时附加该行为


编辑:如果moveUp/moveDown方法工作不正常,可能是您使用的范围字段不正确?

范围基本上是SQL条件(蛋糕格式)

因此,您可能需要将作用域设置为所需的菜单ID

'scope' => array(
    'Link.menu_id' => 5
);
但是,在尝试在类定义上设置数组时,您可能还不知道是哪个ID,因此您可能需要动态地进行设置

$this->Link->Behaviors->attach('Tree', array(
    'scope' => array(
        'Link.menu_id' => $id  // You need to decide how to get this ID
    ),
));
我不知道你什么时候需要这么做。由您决定何时附加该行为


编辑:如果moveUp/moveDown方法工作不正常,可能是您使用的范围字段不正确?

范围基本上是SQL条件(蛋糕格式)

因此,您可能需要将作用域设置为所需的菜单ID

'scope' => array(
    'Link.menu_id' => 5
);
但是,在尝试在类定义上设置数组时,您可能还不知道是哪个ID,因此您可能需要动态地进行设置

$this->Link->Behaviors->attach('Tree', array(
    'scope' => array(
        'Link.menu_id' => $id  // You need to decide how to get this ID
    ),
));
我不知道你什么时候需要这么做。由您决定何时附加该行为


编辑:如果moveUp/moveDown方法工作不正常,可能是您使用的范围字段不正确?

多亏了BadHorsie我终于明白,在模型的行为设置中声明范围是毫无意义的

相反,您(目前我)需要动态附加该行为,在任何操作(添加、编辑、上移、下移等)之前具有所需的范围,以使其工作

现在,我需要确保的是链接总是有一个菜单id。 当有人编辑链接时,必须根据菜单id下拉列表重新填充父id下拉列表(此处需要javascript,模型中需要更多验证规则以确保完整性)

解决方案是在链接模型中创建一个新函数。它的目标是在对树进行任何修改(上移、下移、从树中移除、删除等)时保留范围


多亏了BadHorsie,我终于明白了在模型的行为设置中声明范围是毫无意义的

相反,您(目前我)需要动态附加该行为,在任何操作(添加、编辑、上移、下移等)之前具有所需的范围,以使其工作

现在,我需要确保的是链接总是有一个菜单id。 当有人编辑链接时,必须根据菜单id下拉列表重新填充父id下拉列表(此处需要javascript,模型中需要更多验证规则以确保完整性)

解决方案是在链接模型中创建一个新函数。它的目标是在对树进行任何修改(上移、下移、从树中移除、删除等)时保留范围


多亏了BadHorsie,我终于明白了在模型的行为设置中声明范围是毫无意义的

相反,您(目前我)需要动态附加该行为,在任何操作(添加、编辑、上移、下移等)之前具有所需的范围,以使其工作

现在,我需要确保的是链接总是有一个菜单id。 当有人编辑链接时,必须根据菜单id下拉列表重新填充父id下拉列表(此处需要javascript,模型中需要更多验证规则以确保完整性)

解决方案是在链接模型中创建一个新函数。它的目标是在对树进行任何修改(上移、下移、从树中移除、删除等)时保留范围


多亏了BadHorsie,我终于明白了在模型的行为设置中声明范围是毫无意义的

相反,您(目前我)需要动态附加该行为,在任何操作(添加、编辑、上移、下移等)之前具有所需的范围,以使其工作

现在,我需要确保的是链接总是有一个菜单id。 当有人编辑链接时,必须根据菜单id下拉列表重新填充父id下拉列表(此处需要javascript,模型中需要更多验证规则以确保完整性)

解决方案是在链接模型中创建一个新函数。它的目标是在对树进行任何修改(上移、下移、从树中移除、删除等)时保留范围


“我希望能够在保留范围(菜单id)的同时添加、编辑、删除、上移或下移”-您能举一个意外结果(数据+操作)的例子吗