如何使用insert在查询构建器中插入多个记录? [英] How to use insert in query builder insert multiple records?

查看:481
本文介绍了如何使用insert在查询构建器中插入多个记录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在CakePHP 3中尝试以下操作:

  $ newUsers = [
[
' username'=> 'Felicia',
'age'=> 27,
],
[
'username'=> 'Timmy',
'age'=> 71,
],
];

$ insertQuery = $ this-> Users-> query();

$ insertQuery-> insert(array_keys($ newUsers [0]))
- > values($ newUsers)
- > execute();

我收到以下错误:

 错误:SQLSTATE [21S01]:插入值列表不匹配列列表:1136列计数与第1行的值计数不匹配

SQL查询:INSERT INTO用户(用户名,年龄)VALUES(:c0,:c1,:c2,:c3)



期待 INSERT INTO用户(用户名,年龄)VALUES(:c0,:c1),(:c2,:c3); 作为查询。
$ b

我打开了数据库配置的日志,我看到:

  2014-10- 27 16:10:26调试:INSERT INTO用户(用户名,年龄)VALUES(NULL,NULL,'Array','Array')

请帮助我理解我是否误解了在CakePHP 3.x中使用查询生成器的潜力

解决方案

p>刚刚测试。这是有效的。

  $ newUsers = [
[
'username'=> 'Felicia',
'age'=> 27,
],
[
'username'=> 'Timmy',
'age'=> 71,
],
];

$ columns = array_keys($ newUsers [0]);

提醒!有两种方法来做质量插入。这是一种方法:

  $ insertQuery = $ this-> Users-> query 

$ newUsersValuesExpression = new ValuesExpression($ columns,$ insertQuery-> typeMap() - > types([]));
$ newUsersValuesExpression-> values($ newUsers);

$ insertQuery-> insert($ columns)
- > values($ newUsersValuesExpression)
- > execute();

正如ndm建议的,我喜欢这种方式。

  $ insertQuery = $ this-> Users-> query(); 

$ insertQuery-> insert($ columns);

//您必须始终修改values子句AFTER insert
$ insertQuery-> clause('values') - > values($ newUsers);

$ insertQuery-> execute();


I am trying the following in CakePHP 3:

   $newUsers = [
        [
            'username' => 'Felicia',
            'age' => 27,
        ],
        [
            'username' => 'Timmy',
            'age' => 71,
        ],
    ];

    $insertQuery = $this->Users->query();

    $insertQuery->insert(array_keys($newUsers[0]))
                ->values($newUsers)
                ->execute();

I get the following error:

Error: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

SQL Query: INSERT INTO users (username, age) VALUES (:c0, :c1, :c2, :c3) 

I was expecting INSERT INTO users (username, age) VALUES (:c0, :c1), (:c2, :c3); as the query.

I turned on the log for the database config and I see:

2014-10-27 16:10:26 Debug: INSERT INTO users (username, age) VALUES (NULL, NULL, 'Array', 'Array')

Please help me understand if I misunderstood the potential of using query builder in CakePHP 3.x

解决方案

Just tested. This works.

   $newUsers = [
        [
            'username' => 'Felicia',
            'age' => 27,
        ],
        [
            'username' => 'Timmy',
            'age' => 71,
        ],
    ];

    $columns = array_keys($newUsers[0]);

Alert! There are two ways to do mass insert. This is one way:

    $insertQuery = $this->Users->query();

    $newUsersValuesExpression = new ValuesExpression($columns, $insertQuery->typeMap()->types([]));
    $newUsersValuesExpression->values($newUsers);

    $insertQuery->insert($columns)
                ->values($newUsersValuesExpression)
                ->execute();

As suggested by ndm, I prefer this way.

    $insertQuery = $this->Users->query();

    $insertQuery->insert($columns);

    // you must always alter the values clause AFTER insert
    $insertQuery->clause('values')->values($newUsers);

    $insertQuery->execute();

这篇关于如何使用insert在查询构建器中插入多个记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆