【问题标题】:Yii2 ActiveRecord model with dynamic fields? phpYii2 ActiveRecord 模型与动态字段? php
【发布时间】:2018-03-05 00:48:54
【问题描述】:

大家好,感谢您的帮助。

有一个问题我自己无法解决,但为了你,我会举一个多语言的例子。

我们在数据库中有 3 个表:

  • page -> page_id(primary), date_create
  • page_lang ->related_id、page_id、lang_id、标题、摘录、内容
  • lang -> lang_id、名称、本地、网址

** 示例数据:**

page = { page_id: 3, date_create: 1520209219 }
page_lang = { related_id : 5, page_id : 3, lang_id : 1, title: 'some title en', excerpt: 'some quote en', content: 'some text en'}
page_lang = { related_id : 6, page_id : 3, lang_id : 2, title: 'some title ua', excerpt: 'some quote ua', content: 'some text ua'}
page_lang = { related_id : 7, page_id : 3, lang_id : 3, title: 'some title pl', excerpt: 'some quote pl', content: 'some text pl'}
lang = { lang_id : 1, name: 'English', local : 'en-GB', url : 'en'}
lang = { lang_id : 2, name: 'Ukrainian', local : 'ua-UA', url : 'ua'}
lang = { lang_id : 3, name: 'Polish', local : 'en-GB', url : 'pl'}

如何在YII2中制作ActiveRecord模型它们之间的依赖关系...

我们在管理面板中可以编辑一个页面 所有这些数据和它们都在 save () 方法中保存而无需额外的拐杖

ActiveForm 生成字段为

<?= $form->field($page, 'date_create')->textInput() ?>
return <input name="Page[date_create]" ...>

当然,对于基本格式的其他模型,情况是这样的:

<?= $form->field($pagelang, 'title')->textInput() ?>
<input name="PageLang[title]" ...>

但我们有两种不同的模型 - 两种不同的形式,我无法将它们save()连贯地放在一起

如何将数据组合成一种形式*(一,主模型?)* - 我不明白,我想处理它。希望对您有所帮助。

参考Yii2的“拐杖”,那么它看起来是这样的

// without $form->field(...)
<input name="Page[PageLang][<?php echo $lang->id; ?>][name]" ...>

在 $model->save() 例子中...

...
$data = Yii::$app->request->post( 'Page' );

foreach( $data['PageLang'] as $key => $lang ) {
    // $key = LANG_ID;
    // $lang = { name: _value_, excerpt: _value_, content: _value_ };
    $pagelang = new PageLang()
    $pagelang->title = $lang['title'];
    // ... 
    $pagelang->save();
}
...

但我希望它以正常方式工作。 没有拐杖,就不是安全的解决方案。

谢谢。

【问题讨论】:

  • 您可以创建一个扩展yii\base\Modelformform 包含 PagePageLang 中包含的所有属性。然后可以在伪造的form 中收集所有数据。验证数据后,可以分别保存在PagePageLang中。
  • 嗨。我推荐使用TranslateableBehavior
  • 使用 FormModel,即使用 yii\base\model 扩展您的自定义模型类,并添加 @paul 提到的所有字段。

标签: php database yii2 models active-form


【解决方案1】:

此解决方案有助于链接 {Page} 和 {PageLang}。

当然,{PageLang.lang_id} 与 {Languages.id} 表的链接不是。 (表 'pageLang'、'languages' 不相关)


但是,我们有一个带有语言代码(字符串)的字段 {PageLang.language},如果需要,它们可以与 {Languages} 关联,然后不要绑定。

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多