在我的系统中登录的用户可以选择最喜欢的 CPV ID。 CPV 是应用程序的主要产品,它们存储在表 cpv
中.中的某些栏目
cpv
表是:id
, title
, url
.
现在我需要允许用户检查他们喜欢哪个 CPV,并存储/使用它。我形成了user_cpv
应该存储用户和 cpv id 关系的表。字段是 id
, user_id
, cpv_id
.
所以首先我会显示登录用户的所有 CPV,而且,我会在每个 CPV 旁边给他复选框,这样他就可以选择 3 个最喜欢的。像这样:
在我继续之前,我需要问一个子问题:如果没有从我的模型 ( Cpv ID ) 中提取这个标签,我如何显示复选框?
继续:所以在我的 Controller 的索引操作中,我从 Cpv
中提取 cpv 数据。模型。但我也想我需要从 user_cpv
中提取存储值表,因为那里的每个用户最多可以有 3 个 cpv_id
保存为他的最爱。如果我想标记一些 Cpv ID
,我想我需要这些信息如检查。所以如果用户有 cpv_id
在user_cpv
表,这些 ID 在我向您展示的表中显示的整个列表中标记为已选中。
上图显示了索引操作结果(我没有使用任何小部件)。我想让用户选中其中一些复选框并将其保存到 user_cpv
中 table 。这是我的索引 View 中的一些代码:
<table class="table table-striped table-bordered my-favourites">
<?php $form = ActiveForm::begin(['action' => ['user-cpv/create']]); ?>
<?php foreach ($values as $data): ?>
<tr>
<td><?= $data['cpvId'] ?></td>
<td><?= $form->field($model, 'cpv_id')->checkbox() ?></td>
</tr>
<?php endforeach ?>
<?php ActiveForm::end(); ?>
</table>
在这里,我被困住了。当我显示 CPV 时(让我们像图片中那样只取他们的 ID),如何将存储在 user_cpv
中的那些标记为选中关系表?这是我脑海中的一些粗糙的伪代码:
actionIndex() {
// pull data from cpv table
$model = CPV::find();
// pull data from user_cpv
$relation = UserCpv::find();
// somehow find those that match and maybe pass that info to view ?
}
然后在我看来,如何设置在user_cpv
中找到的cpv_ids选中,如果这是复选框渲染方法? :
<?= $form->field($model, 'cpv_id')->checkbox() ?>
最后,如果用户选中其他一些框,需要验证他最多选择了 3 个框,最后保存。
有人可以帮我解决这个问题吗?感谢任何帮助,指导方针,示例代码......也许我对user_cpv
的想法关系表是错误的?谢谢
最佳答案
为此,您首先需要定义 cpv 模型与 cpv-user 模型的关系。在 cpv 模型中,您将定义关系(关系模型示例)。
公共(public)函数 getUsercpv(){ 返回 $this->hasMany(UserCpv::className(), ['id' => 'cpv_id']);
现在在 Controller 中,您可以从具有关系的 CPV 模型中提取数据
//从cpv表中拉取数据 $model = CPV::find()->joinWith('usercpv');
在 View 中,您可以使用 $data->usercpv 获取 user-cpv 数据,并且可以循环遍历
关于php - 如何使用来自两个模型的数据生成 yii2 表单,但需要将更改保存到其中一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30708137/