php - Laravel Eloquent updateOrCreate 函数不更新整行,而只更新一列
问题描述
我的 Laravel 应用程序有问题。我有一个 XML 文件,我需要将其逐行插入数据库并反复更新这些行。所以我决定使用 Eloquent 模型的“updateOrCreate”方法。但它的行为非常奇怪。我查看了文档,据我了解语法应该是这样的:
模型(在我的情况下是轮胎)::updateOrCreate (["用于搜索的搜索键"=> "键的值)"],["key1 => "valueofkey1", "key2=>"valueofkey2".. .]); 如果它没有找到任何带有“搜索键”的条目,那么它应该使用两个属性数组创建,但如果它确实找到了,它应该使用第二个参数数组进行更新。纠正我我错了。
这是一个完整的功能:
protected function updateDatabase()
{
set_time_limit(150000);//I know not the best approach - XML file has 30k+ rows so it takes a little time to complete
$xml = @new SimpleXMLElement(Storage::disk('ftp')->get("Zaklad/PopisSortimentuVlastnostiXML.xml"));
echo '<script>'; //debug message
echo 'console.log("Xml optained")';
echo '</script>';
$kategorie = [
'Dodávkové',
'Osobní/Offroad/SUV',
'Moto',
'Osobní',
'Hliníkové',
'Ocelové',
'Rezervní'
];
$i = 0;
echo '<script>';
echo 'console.log("Started parsing");';//debug message
echo 'console.log("Length is' . count($xml->table1->Detail_Collection->Detail) . '");';
echo '</script>';
foreach ($xml->table1->Detail_Collection->Detail as $detail) {
echo '<script>';//debug message
echo 'console.log("Row number:' . $i . '")';
echo '</script>';
$i++;
if (in_array($detail['Sortiment3'], $kategorie)) {
Tyre::updateOrCreate(
[
'IDItem' => $detail['IDItem']
],
[
'Farba_nápisu' => $detail['Barva_nápisu'],
'Dosadacia_plocha' => $detail['Dosedací_plocha'],
'Druh_pneu' => $detail['Druh_pneu'],
'Duša' => $detail['Druh_pneu'],
'EAN' => $detail['EAN'],
'ET' => $detail['ET'],
'EU_Smernica' => $detail['EU_Smernica'],
'Hlucnost' => $detail['Hlucnost'],
'IDDisk_kompletu' => $detail['IDDisk_kompletu'],
'IDPneu_kompletu' => $detail['IDPneu_kompletu'],
'IndexT' => $detail['Index'],
'Index__kg_' => $detail['Index__kg_'],
'KodDodavatele' => $detail['KodDodavatele'],
'Konstrukce' => $detail['Konstrukce'],
'KonstrukceD' => $detail['KonstrukceD'],
'KonstrukceN' => $detail['KonstrukceN'],
'MatchT' => $detail['MatchT'],
'MaxCenaEur' => $detail['MaxCenaEur'],
'MaxCenaEurDPH' => $detail['MaxCenaEurDPH'],
'NapravaN' => $detail['NápravaN'],
'NazevZbozi' => $detail['NazevZbozi'],
'Objem' => $detail['Objem'],
'Obrazek' => $detail['Obrazek'],
'OchranaRafku' => $detail['OchranaRafku'],
'Platna' => $detail['Plátna'],
'Pocet_dier' => $detail['Počet_děr'],
'Pouzitie_agro' => $detail['Použití_agro'],
'Povrch_úprava' => $detail['Povrch_Úprava'],
'PoziceM' => $detail['PoziceM'],
'PrilnavostNaMokru' => $detail['PrilnavostNaMokru'],
'Profil' => $detail['Profil'],
'Provoz_Moto' => $detail['Provoz_Moto'],
'ProvozN' => $detail['ProvozN'],
'PSezona' => $detail['PSezona'],
'PSortiment' => $detail['PSortiment'],
'RafekD' => $detail['RáfekD'],
'RafekP' => $detail['RáfekP'],
'Roztec' => $detail['Rozteč'],
'Sezona' => $detail['Sezona'],
'Sortiment1' => $detail['Sortiment1'],
'Sortiment2' => $detail['Sortiment2'],
'Sortiment3' => $detail['Sortiment3'],
'Specifikace' => $detail['Specifikace'],
'SpotrebaPaliva' => $detail['SpotrebaPaliva'],
'Strana' => $detail['Strana'],
'Stredova_diera' => $detail['Středová_díra'],
'Sirka' => $detail['Šířka'],
'SirkaD' => $detail['ŠířkaD'],
'Technologie' => $detail['Technologie'],
'TridaVozu' => $detail['TridaVozu'],
'TypP' => $detail['TypP'],
'Urcenie' => $detail['Určení'],
'Ventil' => $detail['Ventil'],
'Vyrobce1' => $detail['Vyrobce1'],
'Vyrobce2' => $detail['Vyrobce2'],
'Vyrobce3' => $detail['Vyrobce3'],
'WebPopisSK' => $detail['WebPopisSK'],
'Zesileni' => $detail['Zesílení'],
'ZnackaAuta' => $detail['ZnackaAuta'],
]
);
}
}
echo "DONE";
set_time_limit(120);
}
我不知道我在哪里犯了错误,但是如果我有一个空的数据库表,一切都会正常运行,但是当我想更新数据库时,只有“IDItem”列被更新为正确的值,所有剩余的列都得到更新为整个表中每列的相同值。我检查了 XML 文件中的值,并且所有内容都是正确的。我无法解释为什么会这样。先感谢您。
解决方案
推荐阅读
- javascript - 将 jquery 事件与相同的类名元素分开
- sql-server - 如何使用 LINQ 根据 productID 和 productCategoryId 生成唯一的产品序列号?
- python - 无法将 Sqllite 迁移到 django 中的 mysql
- python - 为什么张量流的权重有时不会改变?
- mysql - 从 docker Container 访问主机 mysql
- ios - 在 tableview 的文本字段中搜索
- mysql - MySQL:如果第二个表中没有匹配的行,如何从第一个表中选择一行
- apache-kafka - 如何找到kafka broker宕机的原因?
- cassandra - 卡桑德拉 vs 卡桑德拉+点燃
- sql - 用于连接 2 个表的 SQL 查询