php - 如何使用 Yii2 更新/插入值数组到数据库(一个 id 的多个值重复)

标签 php mysql yii2

我正在从数据库中收集一些数据,然后将其显示在索引 View 中。每行附近都有一个复选框,因此我可以让用户选择他们的最爱。

enter image description here

图文选自一张表cpv。该表包含字段:idtitleimage。由于登录用户最多可以选择 3 个条目作为收藏夹,因此我有一个表来存储用户和他选择的 cpv.id 之间的关系。 user_cpv 表包含列:iduser_idcpv_id

我做了一些显示数据+复选框的肮脏方式,我做了一些将信息 (cpv.id) 传递给应该保存 cpv.id 的 actionUpdate 的方法。但我不知道如何将所有这些保存到 user_cpv 表中。有人能给我一些关于如何正确执行此操作以及如何验证用户不能选择超过 3 个框的想法吗?这是我的代码:

索引 View :

<?php foreach ($values as $data): ?>
    <tr>
        <td>Img goes here</td>
        <td>Title goes here</td>

        <?php // here I have some dirty code, for each row displayed I am executing query that should find entry in 
              // user_cpv table where cpv_id there is == with the cpv.id taken drom cpv table.
              // can this be done more efficient ?
         ?>

        <?php $cpv = UserCpv::getCpvByCpvId($data['cpvId']) ?>
        <?php if ($cpv): ?>
            <td><?= Html::checkbox('favorite[]', true, ['value' => $data['cpvId']]) ?></td>
        <?php else: ?>
            <td><?= Html::checkbox('favorite[]', false, ['value' => $data['cpvId']]) ?></td>
        <?php endif ?>

    </tr>
<?php endforeach ?>

使用 Html::form 打开表单:

我的 Action 更新:

public function actionUpdate()
{
    $userId = Yii::$app->user->identity->id;

    // array of checked cpv.ids (['0' => someId, ['1' => otherCheckedId]])
    $favorites = Yii::$app->request->post('favorite');

    $model = UserCpv::findOne(['user_id' => $userId]);

    if ($model) 
    {
        // this does not work
        $update = UserCpv::updateAll(['cpv_id' => $favorites], "user_id = $userId");

        return $this->render('index', [
            'model' => $model
        ]);
    } 
    else 
    {
        # code...
    }
    // ???
}

有没有人知道应该如何正确地做到这一点?

最佳答案

我看到两种方法:第一种是创建“batchUpdate”方法 - 但对于不同的数据库类型,它不会相同。所以我将描述第二个,因为它看起来很简单。

1. Remove all user relations: 

    UserCpv::deleteAll(['user_id' => $userId]);

2. Create array for batchInsert method:

    $data = [];
    foreach($favorites as $cpv_id) {
        $data[] = ['cpv_id' => $cpv_id, 'user_id' => $userId];
    }

3. Batch insert your data

    Yii::$app->db->createCommand()->batchInsert(
        UserCpv::tableName(), 
        ['cpv_id', 'user_id'], 
        $data
    )->execute();

关于php - 如何使用 Yii2 更新/插入值数组到数据库(一个 id 的多个值重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712294/

相关文章:

php - 简单的 Select 语句不能使用 PDO

php - 在 Kartik Gridview 数据列中自动换行

php - 使用 php 和 mysql 选择随机图像

PHP正则表达式来匹配价格或金额

php - 一次将多行插入mysql

module - 模块内的 RBAC

javascript - YII2 Kartik - ExportMenu 仅导出选中项目的数据

php - PHP中单引号和双引号字符串有什么区别?

php - 文件上传错误: Undefined variable: filePath’

php - 无法在 php 中发送带有多个复选框的多个值