2014-10-21 1 views
1

Я пытаюсь изящно обрабатывать многие многие данные отношений в объекте ATK4 CRUD. Я могу вручную добавить связанные таблицы текущей записи в качестве объектов sub CRUD, а isEditing(), но при этом я разбиваю кнопку «Добавить новую». Код выглядит следующим образом:ATK4: Обработка многих-многих отношений в CRUD - Добавление subCRUD без взлома. Добавление нового

function page_projects($p) { 
      $crud = $this->add('CRUD'); 
      $crud->setModel('Project', null, array('Title', 'School')); 
      if($crud->grid){ 
        $crud->grid->addPaginator(10); 
        $crud->grid->addQuicksearch(array('Title','School')); 
      } 

      if($crud->isEditing()){ 

        $vForm = $crud->form; 

        $keywords = $vForm->add('CRUD'); 
        $keywords->entity_name = 'Keyword'; 
        $keywords->setModel(       
          $crud->model->load($crud->id)-> 
           ref("mProjectKeywords")); 
        //Other snipped m:m rels    
      } 

    } 

вопрос просто, что $ crud-> идентификатор не заполняется (и не должен быть) при создании новой записи, что означает, что я не могу порождать новый суб cruds. Обойти это можно использовать:

if($crud->isEditing() && !is_null($crud->id)) { 

при проверке isEditing(), но это просто останавливает суб CRUDS от того экземпляра, чтобы избежать нагрузки() сгенерирует исключение. Я попытался взглянуть на loadAny() и tryLoad() и не делать то, что хочу во многих контекстах: загружать запись, если она существует, генерировать новую в противном случае.

Кто-нибудь знает, как лучше справиться с этим, и если его еще нет в рамочке, то каков наилучший угол для атаки на эту проблему?

ответ

0

В данном случае это нормальное поведение, потому что вы просто не можете создать mProjectKeywords запись в таблице базы данных, прежде чем вставлять ссылки записей в родительских таблиц (Project и Keywords).

Я делаю что-то вроде if($crud->isEditing() && !is_null($crud->id)) в своих проектах. Это означает, что вам сначала нужно сохранить (вставить) новую запись в Project, и только затем появится суб-CRUD, и вы можете добавить ссылочные записи в форму редактирования Project (которая перезагружается автоматически после сохранения нового проекта).

+0

Спасибо за подтверждение, это в значительной степени то, что я думал. Если бы мы собирались сгладить это в рамках, какой был бы лучший способ справиться с этим ...? т. е. похоже, что может использоваться специальный крюк для сохранения сообщений, если (is_null ($ crud-> id)). В среднесрочной и долгосрочной перспективе я хочу улучшить гибкость многих отношений и построить для них библиотеку компонентов формы. –