Laravel:insertOrIgnore()不接受数组作为输入

时间:2019-12-20 10:08:46

标签: php laravel lumen

我已经使用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 ])发生冲突时什么都不做)

1 个答案:

答案 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);