【发布时间】: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\Model的form。form包含Page和PageLang中包含的所有属性。然后可以在伪造的form中收集所有数据。验证数据后,可以分别保存在Page和PageLang中。 -
嗨。我推荐使用TranslateableBehavior
-
使用 FormModel,即使用
yii\base\model扩展您的自定义模型类,并添加 @paul 提到的所有字段。
标签: php database yii2 models active-form