Php 敏捷工具包CRUD

Php 敏捷工具包CRUD,php,orm,user-interface,frameworks,atk4,Php,Orm,User Interface,Frameworks,Atk4,我正在测试敏捷工具包,但我不明白我做得不好 我有一个名为“家庭”的表,CRUD可以很好地工作 另一个名为“subfamilies”的表与families和CRUD的关系为n到1,也可以正常工作 但这是我的问题,在表“articles”中,我与族的关系为1:1,与子族的关系为1:1,CRUD有效,我可以添加、删除和修改,但当单击“添加”按钮时,如果我在表单上选择一个族,“子族”组合框将显示所有子族,而不仅仅是来自该族的子族 如何指定如果选择了某个族,则“添加”窗体中的组合框仅显示与该族相关的子族

我正在测试敏捷工具包,但我不明白我做得不好

我有一个名为“家庭”的表,CRUD可以很好地工作

另一个名为“subfamilies”的表与families和CRUD的关系为n到1,也可以正常工作

但这是我的问题,在表“articles”中,我与族的关系为1:1,与子族的关系为1:1,CRUD有效,我可以添加、删除和修改,但当单击“添加”按钮时,如果我在表单上选择一个族,“子族”组合框将显示所有子族,而不仅仅是来自该族的子族

如何指定如果选择了某个族,则“添加”窗体中的组合框仅显示与该族相关的子族

代码:

文件./lib/Model/Articulos.php:

class Model_Articulos extends Model_Table {
public $entity_code  = 'articulos';

    function init(){
        parent::init();

        $this->addField('name')->mandatory(true);
        $this->addField('description')->mandatory(true)->type('text');
        $this->addField('familias_id')->mandatory(true)->refModel('Model_Familias');
        $this->addField('subfamilias_id')->refModel('Model_Subfamilias');

    }
}
class page_articulos extends Page {
    function init(){
        parent::init();

        $crud=$this->add('CRUD');
        $crud->setModel('Articulos');

        if($crud->grid){
            $crud->grid->getColumn('name');
            $crud->grid->getColumn('familias');    
            $crud->grid->getColumn('subfamilias');    

        }
    }
}
文件./page/articulos.php:

class Model_Articulos extends Model_Table {
public $entity_code  = 'articulos';

    function init(){
        parent::init();

        $this->addField('name')->mandatory(true);
        $this->addField('description')->mandatory(true)->type('text');
        $this->addField('familias_id')->mandatory(true)->refModel('Model_Familias');
        $this->addField('subfamilias_id')->refModel('Model_Subfamilias');

    }
}
class page_articulos extends Page {
    function init(){
        parent::init();

        $crud=$this->add('CRUD');
        $crud->setModel('Articulos');

        if($crud->grid){
            $crud->grid->getColumn('name');
            $crud->grid->getColumn('familias');    
            $crud->grid->getColumn('subfamilias');    

        }
    }
}
最后,您可以得到mysql工作台eer模型

提前谢谢大家,


Serxoz。

从技术上讲,定义模型时,族和子族之间没有子链接,因此CRUD不知道依赖关系

要做您需要的事情,您必须充分理解以下两个示例:

接下来,创建一个表单,用于为Articulus添加新记录。您需要使用MVCForm,但必须为“子族”字段添加一些附加代码。完成后,需要将代码转换为单独的类,例如从MVCForm继承的Form_Articulos。代码应该放在表单的“setModel”方法中

接下来,像这样扩展CRUD:

class MyCrud extends CRUD {
    public $form_class='Form_Articulos';
}
新表格将用于编辑和添加。您可能还需要添加模型级验证

class Model_Articulous ... {
    ...


    function beforeUpdate(&$data){

        $family_id=$this->getRef('subfamilias_id')->get('familia_id');
        if($family_id != $this->get('familias_id'))
            throw $this->exception('Subfamily does not belong to selected family');
    }
}

在转换form_Articulos类中的表单之前,我在./page/Articulos.php中创建了一个表单来添加新记录:$form=$this->add('MVCForm')$表单->集合模型(“关节”);但我不明白如何才能访问下拉字段来更改其内容。您看过示例吗?是的,在示例中,setValueList是在addField之前完成的,但当我这样做时,setModel字段是自动生成的,如果我自己生成字段,我不知道如何与model连接。LOL,对不起,这不是关于查看示例,是关于RTFM的。再次抱歉,我将尝试一些东西并再次发布。非常感谢。模型只是填充表单上的字段。您可以使用$form->getElement('fieldname')访问字段,然后对其执行任何操作。你甚至可以->销毁它。