Yii2: update field with query builder

2019-02-16 05:12发布

How can I update field with query builder in Yii2? I can't find this in documentation.

Thanks!

UPD

This is the solution:

// UPDATE
$connection = Yii::$app->db;
$connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();

6条回答
欢心
2楼-- · 2019-02-16 05:17

Try like this,

 Yii::$app->db->createCommand()
        ->update('table_name', [SET_Values], 'CONDITION')
        ->execute();

For Example,

 Yii::$app->db->createCommand()
             ->update('users', ['status' => 1], 'age > 30')
             ->execute();
查看更多
太酷不给撩
3楼-- · 2019-02-16 05:18

Query builder is for select queries only (sum, max, count too). You should use other methods - AR or raw queries (https://github.com/yiisoft/yii2/blob/master/docs/guide/db-dao.md#basic-sql-queries)

查看更多
干净又极端
4楼-- · 2019-02-16 05:21
 Yii::$app->db->createCommand()
         ->update('customer', ['otp' => $otp_rand], ['custid' => 23])
         ->execute();

**this is the right syntax and works & tested in yii2 **

查看更多
5楼-- · 2019-02-16 05:24

Also, if you need to use the column itself in the update query, you must use yii\db\Expression.

\Yii::$app->db->createCommand()
    ->update('user', ['visits' => new \yii\db\Expression('visits + 1')], 'age > 30')
    ->execute();
查看更多
Luminary・发光体
6楼-- · 2019-02-16 05:30

If you have mpre then one condition then use this

$this->localdb->createCommand()
    ->update(
        $this->MYTable,
        [
            'name' => $el['new'],
            'data' => $el['data'],
        ],
        [
            'userId' => $this->user,
            'product_id' => $this->productId,
            'name' => $el['old'],
            'created' => $el['date'],
            'category' => $el['cat'],
        ]

    );
查看更多
劫难
7楼-- · 2019-02-16 05:40

Create command can be used directly as follows :

\Yii::$app->db->createCommand("UPDATE table SET column1=:column1, column2=:column2 WHERE id=:id")
->bindValue(':id', your_id)
->bindValue(':column1', :column1_value)
->bindValue(':column2', :column2_value)
->execute();
查看更多
登录 后发表回答