php - 如何使用来自两个模型的数据生成 yii2 表单,但需要将更改保存到其中一个

标签 php mysql model-view-controller checkbox yii2

在我的系统中登录的用户可以选择最喜欢的 CPV ID。 CPV 是应用程序的主要产品,它们存储在表 cpv 中.中的某些栏目 cpv表是:id , title , url .

现在我需要允许用户检查他们喜欢哪个 CPV,并存储/使用它。我形成了user_cpv应该存储用户和 cpv id 关系的表。字段是 id , user_id , cpv_id .

所以首先我会显示登录用户的所有 CPV,而且,我会在每个 CPV 旁边给他复选框,这样他就可以选择 3 个最喜欢的。像这样:

enter image description here

在我继续之前,我需要问一个子问题:如果没有从我的模型 ( Cpv ID ) 中提取这个标签,我如何显示复选框?

继续:所以在我的 Controller 的索引操作中,我从 Cpv 中提取 cpv 数据。模型。但我也想我需要从 user_cpv 中提取存储值表,因为那里的每个用户最多可以有 3 个 cpv_id保存为他的最爱。如果我想标记一些 Cpv ID,我想我需要这些信息如检查。所以如果用户有 cpv_iduser_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/

相关文章:

Mysql 重启复制主/从

php - 尝试使用 PDO 从数据库动态加载数据

java - Spring MVC 将参数绑定(bind)到支持对象

java - MVC架构中如何避免使用instanceof

php - 排序 json 对象 laravel

php - MySQL选择两列之间的范围日期

javascript - 无法让谷歌地图与 requirejs 一起使用

java - Spring和MVC正确的项目结构

php - PHP DOMDocument 类 jQuery 选择器

php - 通过 PageController 路由所有请求,现有 Controller 除外 (Zend Framework)