【问题标题】:How to prepare PHP multidimensional arrays for Laravel Mass updateOrCreate()?如何为 Laravel Mass updateOrCreate() 准备 PHP 多维数组?
【发布时间】:2018-02-24 20:28:03
【问题描述】:

我正在尝试批量插入 Laravel (5.6) 模型。阵列准备有问题;它返回

lluminate \ Database \ QueryException (42S22)
SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' 
(SQL: insert into `_geolocation` (`0`, `1`, `2`, `3`, `4`) values 
(Manchester,+UK, Manchester,+UK, Manchester,+UK, Manchester,+UK, 
Manchester,+UK))

我正在生成这样的数组:

if($outputTo->status->message == "OK"){ // if
    for ($i = 0; $i < $outputTo->total_results; $i++) {
        //print_r($outputFrom->results[$i]->geometry->lat);
        $geodata_b [] =[
            $formattedAddrTo,
            $outputTo->results[$i]->formatted,
            $outputTo->results[$i]->geometry->lat,
            $outputTo->results[$i]->geometry->lng,
            ];
    }
}

这是我的数组的输出;

    array:5 [▼
  0 => array:4 [▼
    0 => "Manchester,+UK"
    1 => "Manchester, Greater Manchester, England, United Kingdom"
    2 => 53.4791301
    3 => -2.2441009
  ]
  1 => array:4 [▼
    0 => "Manchester,+UK"
    1 => "Chapel Street Primary School, Chapel Street, Manchester M19 3GH, United Kingdom"
    2 => 53.443957
    3 => -2.1858478
  ]
  2 => array:4 [▼
    0 => "Manchester,+UK"
    1 => "The Manchester, Lytham Road, Bispham FY1 6AH, United Kingdom"
    2 => 53.8067298
    3 => -3.0549142
  ]
  3 => array:4 [▼
    0 => "Manchester,+UK"
    1 => "The Manchester, Bromsgrove Road, Bromsgrove B62 0HH, United Kingdom"
    2 => 52.4003403
    3 => -2.0539726
  ]
  4 => array:4 [▼
    0 => "Manchester,+UK"
    1 => "The Harlequin, Spitalfields, Sheffield S3 8GG, United Kingdom"
    2 => 53.3884864
    3 => -1.4663405
  ]
]

插入代码;

    $geolCache = \App\Geolocation::updateOrCreate([$geodata_b]);

我的模型;

protected $fillable = ['adrr','faddr','lat','lng'];

谁能帮我解决这个问题?

【问题讨论】:

    标签: php mysql laravel-eloquent mass-assignment laravel-5.6


    【解决方案1】:

    您没有关注键值对。试试这个代码

    if($outputTo->status->message == "OK"){ // if
        for ($i = 0; $i < $outputTo->total_results; $i++) {
            $geodata_b [] = [
                'adrr' => $formattedAddrTo,
                'faddr' => $outputTo->results[$i]->formatted,
                'lat' => $outputTo->results[$i]->geometry->lat,
                'lng' => $outputTo->results[$i]->geometry->lng,
                ];
        }
    }
    

    【讨论】:

    • 非常感谢您的快速回答;我尝试了您的代码,但不幸的是我现在收到此错误; Illuminate \ Database \ QueryException (42000) SQLSTATE[42000]: 语法错误或访问冲突:1064 你的 SQL 语法有错误;检查对应的手册......请帮助!
    • 最后搞定了。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多