从父控制器访问子模型

Posted

技术标签:

【中文标题】从父控制器访问子模型【英文标题】:Access child model from parent controller 【发布时间】:2018-11-15 15:09:02 【问题描述】:

我无法在没有用户操作的情况下访问子模型转发器字段以加载,我在父模型控制器中使用 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 共享的这种方法工作正常,转发器字段自动加载基于定义的 maxItems 而无需用户操作。 有人可以分享我如何解决这个问题吗?

【问题讨论】:

好的,你能分享你的关系人员,以便我可以在我的位置和关系配置中重新创建表单吗? 我已经更新了我的问题以及我所做的关系.. 谢谢我会在我的环境中测试并告诉你 提前谢谢先生.. 【参考方案1】:

您可以将此代码添加到您的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;
        
    

    ...

试试这个,它肯定对你有用

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

【讨论】:

完美运行.. 非常感谢@HardikSatasiya 对于这个$emptyFields[] = ['anak' => ' '];,我们可以根据anak字段的数据库值动态定义anak的值吗.. 例如 anak 是一个下拉菜单,其中包含基于 anak 模型的记录数的选项数量,如果您混淆了,请原谅我的语言.. 是的,我很确定我们可以做到这一点,我需要对其进行测试,并将根据它在回答中添加其他信息:)。 先生,我已经弄清楚了。我通过模型的计数记录定义迭代次数,并用 anak 的索引定义空字段。你是最好的先生。谢谢

以上是关于从父控制器访问子模型的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - 从父控制器运行子控制器的功能

如何在 Angular 1.5 中从父控制器访问组件方法

从父视图控制器再次推送时,子视图框架发生变化

Swift - 将数据从父视图控制器传递到子视图控制器

从父级删除后保留的子视图控制器

应该从父 ViewController 还是子 ViewController 调用 popViewController?