Mover uma linha de uma tabela para outra (a lista Inserir valor não corresponde à lista de colunas)
Eu estou usando o construtor de consultas Fluent do Laravel PHP Framework para mover linhas de uma tabela para outra. PDO está sendo usado. Enquanto estiver usando a consulta brutaDB::query()
, Eu recebo o erro:
Erro
SQLSTATE[21S01]: Insert value list does not match column list:
1136 Column count doesn't match value count at row 1
SQL: INSERT IGNORE into listings_archive VALUES (?, ?)
Inquerir
// Get rows from first table
$rows = DB::table('table_1')
->where('id', '>', '12345')
->get();
// Copy rows to second table
foreach($rows as $row) {
$listing = get_object_vars($row);
DB::query('INSERT IGNORE into table_2 VALUES (?, ?)', $row);
}
var_dump de $ row
array(39) {
["id"]=>
string(7) "2511877"
["name"]=>
string(2) "AB"
["color"]=>
NULL
["type"]=>
NULL
...
O que está causando o erro e como ele pode ser corrigido? Eu tentei remover os elementos comNULL
s mas ainda obter o mesmo erro!
Este é possivelmente um problema com a matriz sendo passada paraDB::query()
. Este exemplo muito simples deu erros semelhantes:
$row = array('id', 123);
DB::query('INSERT IGNORE into table_2 VALUES (?, ?)', $row);
e
$row = array('id' => 123);
DB::query('INSERT IGNORE into table_2 VALUES (?, ?)', $row);
Erro
SQLSTATE[21S01]: Insert value list does not match column list:
1136 Column count doesn't match value count at row 1