代码之家  ›  专栏  ›  技术社区  ›  Isral Bustami

从父控制器访问子模型

  •  3
  • Isral Bustami  · 技术社区  · 6 年前

    在没有用户操作的情况下访问子模型中继器字段加载时遇到问题,在父模型控制器中使用relationcontroller 这就是我在父控制器中所做的

    class WartaRutin extends Controller
    {
        public $implement = ['Backend\Behaviors\ListController',
                             'Backend\Behaviors\FormController',
                             'Backend\Behaviors\RelationController']; 
    
        public $listConfig = 'config_list.yaml';
        public $formConfig = 'config_form.yaml';
        public $relationConfig = 'config_relation.yaml';      
    
        public function __construct()
        {
            parent::__construct();
    
        }
    
        public function formExtendFieldsBefore($form) {
    
            if($form->model instanceof Mismaiti\MyWarta\Models\Baptis){
    
                $iteration8 = $form->fields['peserta']['maxItems'];
    
                if(is_numeric($iteration8) && $iteration8 > 0) {
                $emptyFields = [];                             
                    while($iteration8 > 0) {
                        $emptyFields[] = ['anak' => ' '];                    
                        $iteration8--;
                    }
                $form->model->peserta = $emptyFields;
                }
    
            } 
        } 
    }
    

    此子模型字段

    fields:
        ...        
        peserta:
            label: 'Peserta Baptis'
            ...
            maxItems: '4'
            ...
        form:
            fields:
                anak:
                    label: 'Nama Anak'
                    ...
                ortu:
                    ...
                alamatbaptis:
                    ...
    

    此的父模型字段

    baptisan:
            label: ''           
            ...
            type: partial
            path: field_baptis
            ...
    

    这是config_relation.yaml

    baptisans:
    label: Baptisan
    view:
        list: $/mismaiti/mywarta/models/baptis/relation_columns.yaml
        toolbarButtons: add|create|remove                  
    manage:
        form: $/mismaiti/mywarta/models/baptis/relation_fields.yaml
        list: $/mismaiti/mywarta/models/baptis/relation_columns.yaml 
    

    我在父模型中定义的这个关系

    public $belongsToMany = [
         'baptisans' => [
            Baptis::class,'table' => 'mismaiti_mywarta_rutbaptis'
         ]
    ];
    

    子模型中的关系

    public $belongsToMany = [
        'wartarutin' => [
            WartaRutin::class,'table' => 'mismaiti_mywarta_rutbaptis'            
        ]
    
    ];
    

    在我使用relationcontroller之前,@hardiksatasiya共享的这个方法运行良好,repeater字段根据定义的maxitems自动加载,而不需要用户操作。 有人能告诉我怎么解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Hardik Satasiya    6 年前

    您可以将此代码添加到 WartaRutin controller 添加那些空字段

    class WartaRutin extends Controller {
    
        ...
    
        public function relationExtendManageWidget($widget, $field, $model)
        {
            // we will do it for this model only
            if ($widget->model instanceof \Mismaiti\MyWarta\Models\Baptis) {
                // fetch max item
                $iteration8 = $widget->fields['peserta']['maxItems'];
    
                // use loop and add those empty fields
                if(is_numeric($iteration8) && $iteration8 > 0) {
    
                    $emptyFields = [];                             
                    while($iteration8 > 0) {
                        $emptyFields[] = ['anak' => ' '];                    
                        $iteration8--;
                    }
                $widget->model->peserta = $emptyFields;
            }
        }
    
        ...
    

    试试这个,对你一定有用

    如果有任何疑问或不起作用,请评论。