从父控制器访问子模型
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 的索引定义空字段。你是最好的先生。谢谢以上是关于从父控制器访问子模型的主要内容,如果未能解决你的问题,请参考以下文章
应该从父 ViewController 还是子 ViewController 调用 popViewController?