Agile-инструментарий CRUD

Тестирую Agile Toolkit и не понимаю, что я делаю не так.

У меня есть таблица с именем «семьи», с которой CRUD отлично работает.

Другая таблица под названием «подсемейства» с отношением n к 1 с семействами и CRUD тоже работает нормально.

Но вот моя проблема, в таблице «статьи» у меня есть отношение 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');

    }
}

файл ./page/articulos.php:

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');    

        }
    }
}

И, наконец, вы можете получить модель eer рабочей среды mysql здесь

Заранее спасибо,

Серхоз.


person serxoz    schedule 05.12.2011    source источник


Ответы (1)


Технически, когда вы определяете модель, между семейством и подсемейством нет дополнительной связи, поэтому ваш CRUD не будет знать о зависимости.

Чтобы сделать то, что вам нужно, вы должны полностью понять следующие два примера:

Далее создайте форму для добавления новой записи для Articulous. Вам нужно будет использовать MVCForm, но вам нужно будет добавить дополнительный код для поля подсемейства. Когда вы это сделаете, вам нужно будет преобразовать свой код в отдельный класс, такой как Form_Articulos, унаследованный от MVCForm. Ваш код должен находиться внутри метода 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');
    }
}
person romaninsh    schedule 05.12.2011
comment
Перед преобразованием формы в классе Form_Articulos я создаю форму для добавления новых записей в ./page/articulos.php: $form = $this-›add('MVCForm'); $form-›setModel('Articulos'); Но я не понимаю, как я могу получить доступ к выпадающим полям, чтобы изменить его содержимое. - person serxoz; 07.12.2011
comment
а вы пример смотрели? - person romaninsh; 07.12.2011
comment
да, в примере setValueList выполняется до addField, но когда я делаю setModel, поля генерируются автоматически, и если я генерирую поля самостоятельно, я не знаю, как подключиться к модели. - person serxoz; 07.12.2011
comment
LOL, извините, речь идет не о том, чтобы посмотреть пример, а о RTFM. Извините еще раз, я собираюсь попробовать некоторые вещи и опубликовать снова. Спасибо! - person serxoz; 08.12.2011
comment
Модель просто заполняет поля вашей формы. Вы можете получить доступ к полям, используя $form->getElement('fieldname'), а затем делать с ним что угодно. Вы даже можете -›destroy() его. - person romaninsh; 08.12.2011