我已经使用JOIN提取了一些记录,然后将输出放入数组中。 我试图使用insertOrIgnore()和implode()将这些记录放在另一个表中。 以下是我编写的代码: 代码:
$strSql = DB::table('details')
->join("students", 'details.name', '=', 'students.name')
->select('details.id','students.contact')
->get();
foreach($strSql as $values){
$arrValues[] = "[ 'id' => '$values->id', 'contact' => $values->contact ]";
}
DB::table('Students_details')->insertOrIgnore([
(implode( ', ' , $arrValues))
]);
错误: 列无法识别。
SQLSTATE [42703]:未定义列:7错误:关系“ Students_details”的列“ 0”不存在 第1行:发生冲突时,将值($ 1)插入“ Students_details”(“ 0”)值中... ^(SQL:插入到“ Students_details”(“ 0”)中的值(['id'=>'3','contact'=> 232453876],['id'=>'Mark','contact'=> 567085643 ])发生冲突时什么都不做)
答案 0 :(得分:3)
看来您已经使事情复杂化了。 InsertIgnore
可以采用键/值对的数组,也可以采用键/值对的数组,因此您无需创建该数组的字符串表示形式然后内插。
您目前所拥有的代码不会创建键/值对的嵌套数组,因此将假定该数组的数字键实际上是列名,而该列的值是的字符串版本数据。
如果您想使查询保持与现在相同,可以执行以下操作:
$results = DB::table('details')
->join("students", 'details.name', '=', 'students.name')
->select('details.id', 'students.contact')
->get()
->map(function ($item) {
return (array)$item;
})
->toArray();
DB::table('Students_details')->insertOrIgnore($results);