{"id":962,"date":"2025-06-12T03:41:54","date_gmt":"2025-06-11T19:41:54","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/962.html"},"modified":"2025-06-12T03:41:54","modified_gmt":"2025-06-11T19:41:54","slug":"%e4%bc%98%e9%9b%85%e7%9a%84upsert%ef%bc%9a%e8%8b%a5%e5%ad%98%e5%9c%a8%e5%88%99%e6%9b%b4%e6%96%b0%ef%bc%8c%e8%8b%a5%e4%b8%8d%e5%ad%98%e5%9c%a8%e5%88%99%e6%8f%92%e5%85%a5%e3%80%82","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/962.html","title":{"rendered":"\u4f18\u96c5\u7684Upsert\uff1a\u82e5\u5b58\u5728\u5219\u66f4\u65b0\uff0c\u82e5\u4e0d\u5b58\u5728\u5219\u63d2\u5165\u3002"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>Upsert&#65288;Update or Insert&#65289;&#25805;&#20316;&#26159;&#25968;&#25454;&#24211;&#31649;&#29702;&#31995;&#32479;&#20013;&#29992;&#20110;&#22788;&#29702;&#25968;&#25454;&#25554;&#20837;&#21644;&#26356;&#26032;&#30340;&#19968;&#31181;&#39640;&#25928;&#26041;&#24335;&#12290;&#23427;&#21487;&#20197;&#26681;&#25454;&#29616;&#26377;&#35760;&#24405;&#26159;&#21542;&#23384;&#22312;&#26469;&#20915;&#23450;&#25191;&#34892;&#20309;&#31181;&#25805;&#20316;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#20351;&#29992;SQL&#36827;&#34892;Upsert&#25805;&#20316;&#30340;&#31034;&#20363;&#12290;<\/p>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;<code>users<\/code>&#30340;&#34920;&#65292;&#20854;&#20013;&#21253;&#21547;&#20197;&#19979;&#21015;&#65306;<\/p>\n<ul>\n<li><code>id<\/code> (&#20027;&#38190;)<\/li>\n<li><code>name<\/code><\/li>\n<li><code>email<\/code><\/li>\n<\/ul>\n<p>&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;SQL&#35821;&#21477;&#36827;&#34892;Upsert&#25805;&#20316;&#65306;<\/p>\n<pre><code class=\"language-sql\">INSERT INTO users (id, name, email)\nVALUES (1, 'John Doe', 'john.doe@example.com')\nON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, email = EXCLUDED.email;<\/code><\/pre>\n<p>&#35299;&#37322;&#65306;<\/p>\n<ul>\n<li><code>INSERT INTO users (id, name, email)<\/code>&#65306;&#25351;&#23450;&#25105;&#20204;&#35201;&#21521;<code>users<\/code>&#34920;&#25554;&#20837;&#30340;&#25968;&#25454;&#12290;<\/li>\n<li><code>(1, 'John Doe', 'john.doe@example.com')<\/code>&#65306;&#25552;&#20379;&#35201;&#25554;&#20837;&#30340;&#20855;&#20307;&#25968;&#25454;&#12290;<\/li>\n<li><code>ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, email = EXCLUDED.email;<\/code>&#65306;&#23450;&#20041;&#24403;&#20914;&#31361;&#21457;&#29983;&#26102;&#65288;&#21363;<code>id<\/code>&#24050;&#32463;&#23384;&#22312;&#20110;&#34920;&#20013;&#65289;&#65292;&#22914;&#20309;&#26356;&#26032;&#35760;&#24405;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#23558;<code>name<\/code>&#21644;<code>email<\/code>&#23383;&#27573;&#35774;&#32622;&#20026;<code>EXCLUDED<\/code>&#20013;&#30340;&#20540;&#65292;&#36825;&#34920;&#31034;&#20445;&#30041;&#29616;&#26377;&#30340;&#20540;&#12290;<\/li>\n<\/ul>\n<p>&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159;&#20854;&#20182;&#32534;&#31243;&#35821;&#35328;&#25110;&#26694;&#26550;&#65292; Upsert&#25805;&#20316;&#30340;&#20855;&#20307;&#23454;&#29616;&#21487;&#33021;&#20250;&#26377;&#25152;&#19981;&#21516;&#12290;&#20363;&#22914;&#65292;&#22312;Python&#20013;&#65292;&#21487;&#20197;&#20351;&#29992;<code>psycopg2<\/code>&#24211;&#36827;&#34892;PostgreSQL&#30340;Upsert&#25805;&#20316;&#65306;<\/p>\n<pre><code class=\"language-python\">import psycopg2\n\n# &#36830;&#25509;&#21040;&#25968;&#25454;&#24211;\nconn = psycopg2.connect(database=\"mydatabase\", user=\"myuser\", password=\"mypassword\", host=\"localhost\")\ncur = conn.cursor()\n\n# &#23450;&#20041;&#35201;&#25554;&#20837;&#30340;&#25968;&#25454;\ndata = (1, 'John Doe', 'john.doe@example.com')\n\n# &#25191;&#34892;Upsert&#25805;&#20316;\ntry:\n    cur.execute(\"INSERT INTO users (id, name, email) VALUES (%s, %s, %s)\", data)\n    conn.commit()\nexcept psycopg2.IntegrityError as e:\n    if \"duplicate key value violates\" in str(e):\n        print(\"Record already exists, updating...\")\n        cur.execute(\"UPDATE users SET name = %s, email = %s WHERE id = %s\", data)\n        conn.commit()\n    else:\n        raise\n\n# &#20851;&#38381;&#36830;&#25509;\ncur.close()\nconn.close()<\/code><\/pre>\n<p>&#36825;&#20010;&#31034;&#20363;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Python&#20013;&#20351;&#29992;<code>psycopg2<\/code>&#24211;&#36827;&#34892;PostgreSQL&#30340;Upsert&#25805;&#20316;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#25968;&#25454;&#24211;&#35760;&#24405;&#30340;&#31649;&#29702;&#28041;&#21450;&#22810;&#31181;&#25805;&#20316;&#65292;&#20854;&#20013;&#25554;&#20837;&#21644;&#26356;&#26032;&#26159;&#26368;&#24120;&#35265;&#30340;&#12290;&#20294;&#26159;&#65292;&#22312;&#25105;&#20204;&#38656;&#35201;&#26681;&#25454;&#26576;&#20123;&#21807;&#19968;&#30340;&#26631;&#35782;&#31526;&#26469;&#25554;&#20837;&#26032;&#35760;&#24405;&#25110;&#26356;&#26032;&#29616;&#26377;&#35760;&#24405;&#30340;&#24773;&#20917;&#19979;&#65292;&#25105;&#20204;&#35813;&#24590;&#20040;&#21150;&#65311;&#36825;&#23601;&#26159;&#25152;&#35859;&#30340;upsert&#65288;&ldquo;update&rdquo;&#19982;&ldquo;insert&rdquo;&#30340;&#28151;&#21512;&#65289;&#21151;&#33021;&#21457;&#25381;&#20316;&#29992;&#30340;&#22320;&#26041;&#65292;Laravel&#30340;Eloquent ORM&#25552;&#20379;&#20102;&#22788;&#29702;&#36825;&#31181;&#25805;&#20316;&#30340;&#19968;&#31181;&#38750;&#24120;&#27969;&#30021;&#30340;&#26041;&#24335;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#28145;&#20837;&#25506;&#35752;Eloquent&#12290;<code>upsert<\/code>&#26041;&#27861;&#24182;&#23637;&#31034;&#20854;&#20351;&#29992;&#30340;&#21508;&#31181;&#31034;&#20363;&#12290;<\/p><h2>&#22522;&#26412;&#30340;eloquent upsert&#25805;&#20316;<\/h2><p>&#22312;&#25105;&#20204;&#28145;&#20837;&#20363;&#23376;&#20043;&#21069;&#65292;&#29702;&#35299;&#22522;&#26412;&#27010;&#24565;&#33267;&#20851;&#37325;&#35201;&#12290;<code>upsert<\/code>&#22312;Eloquent&#20013;&#65292;upsert&#25805;&#20316;&#20801;&#35768;&#24744;&#20351;&#29992;&#21333;&#20010;&#26041;&#27861;&#35843;&#29992;&#26469;&#28155;&#21152;&#26032;&#35760;&#24405;&#25110;&#26356;&#26032;&#29616;&#26377;&#35760;&#24405;&#12290;&#36825;&#24847;&#21619;&#30528;&#22914;&#26524;&#22522;&#20110;&#21807;&#19968;&#32422;&#26463;&#30340;&#35760;&#24405;&#24050;&#23384;&#22312;&#65292;&#21017;Eloquent&#23558;&#23545;&#20854;&#36827;&#34892;&#26356;&#26032;&#12290;&#21542;&#21017;&#65292;&#23427;&#23558;&#25554;&#20837;&#19968;&#20010;&#26032;&#30340;&#35760;&#24405;&#12290;<\/p><p>&#20197;&#19979;&#26159;&#22522;&#26412;&#30340;&#35821;&#27861;&#32467;&#26500;&#12290;<code>upsert<\/code>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#20320;&#22312;&#35828;&#20160;&#20040;&#12290;<\/p><pre><code>Model::upsert(array $values, mixed $uniqueBy, array|null $update = null);\n<\/code><\/pre><p>&#22320;&#28857;&#65306;<\/p><p><code>$update<\/code>&#36825;&#26159;&#19968;&#20010;&#25351;&#23450;&#35201;&#26356;&#26032;&#30340;&#23383;&#27573;&#25968;&#32452;&#65292;&#22914;&#26524;&#35760;&#24405;&#25214;&#21040;&#30340;&#35805;&#12290;&#22914;&#26524;&#23427;&#23384;&#22312;&#30340;&#35805;&#12290;<code>null<\/code>Eloquent &#23558;&#26356;&#26032;&#25152;&#26377;&#23383;&#27573;&#12290;<\/p><p><code>$uniqueBy<\/code>&#30830;&#23450;Eloquent&#22914;&#20309;&#26816;&#27979;&#35760;&#24405;&#26159;&#21542;&#23384;&#22312;&#25110;&#19981;&#23384;&#22312;&#12290;&#23427;&#36890;&#24120;&#26159;&#25351;&#20855;&#26377;&#21807;&#19968;&#32422;&#26463;&#30340;&#21015;&#21517;&#12290;<\/p><p><code>$values<\/code>&#19968;&#20010;&#25968;&#32452;&#35760;&#24405;&#20102;&#20320;&#35201;&#25554;&#20837;&#25110;&#26356;&#26032;&#30340;&#35760;&#24405;&#12290;<\/p><h3>&#22522;&#26412;&#30340;&#26356;&#26032;&#25554;&#20837;&#31034;&#20363;<\/h3><p>&#35753;&#25105;&#20204;&#30475;&#19968;&#19979;&#19968;&#20010;&#28436;&#31034;&#22914;&#20309;&#20351;&#29992;&#30340;&#31616;&#21333;&#20363;&#23376;&#12290;<code>upsert<\/code>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#12290;<code>users<\/code>&#26377;&#19968;&#20010;&#23383;&#27573;&#21253;&#21547;&#34920;&#30340;id&#12289;&#21517;&#31216;&#21644;&#30005;&#23376;&#37038;&#20214;&#12290;&#36825;&#20010;&#30005;&#23376;&#37038;&#20214;&#23383;&#27573;&#26377;&#21807;&#19968;&#32422;&#26463;&#12290;<\/p><pre><code>User::upsert([\n    ['name' =&gt; 'John Doe', 'email' =&gt; '[email&nbsp;protected]'],\n    ['name' =&gt; 'Jane Doe', 'email' =&gt; '[email&nbsp;protected]']\n], 'email');\n<\/code><\/pre><p>&#36825;&#20010;&#20195;&#30721;&#20250;&#25554;&#20837;&#19981;&#23384;&#22312;&#30340;&#29992;&#25143;&#65292;&#25110;&#32773;&#22914;&#26524;&#20855;&#26377;&#32473;&#23450;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#30340;&#29992;&#25143;&#24050;&#32463;&#23384;&#22312;&#65292;&#21017;&#26356;&#26032;&#20182;&#20204;&#30340;&#22995;&#21517;&#12290;<\/p><h2>&#39640;&#32423;&#36861;&#21152;&#26356;&#26032;&#29992;&#20363;<\/h2><p>&#38543;&#30528;&#24212;&#29992;&#31243;&#24207;&#30340;&#22686;&#38271;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#22788;&#29702;&#26356;&#22797;&#26434;&#30340;&#22330;&#26223;&#65292;&#22312;&#36825;&#20123;&#22330;&#26223;&#20013;&#65292;&#31616;&#21333;&#30340;&#21807;&#19968;&#32422;&#26463;&#19981;&#36275;&#20197;&#28385;&#36275;&#38656;&#27714;&#12290;&#35753;&#25105;&#20204;&#25506;&#35752;&#19968;&#19979;Eloquent&#30340;&#19968;&#20123;&#39640;&#32423;&#29992;&#20363;&#12290;<code>upsert<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h3>&#22797;&#21512;&#21807;&#19968;&#38190;<\/h3><p>&#26377;&#26102;&#65292;&#20026;&#20102;&#30830;&#23450;&#34920;&#20013;&#30340;&#35760;&#24405;&#30340;&#21807;&#19968;&#24615;&#65292;&#21487;&#33021;&#38656;&#35201;&#22788;&#29702;&#22797;&#21512;&#21807;&#19968;&#38190;&#12290;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#25105;&#20204;&#21487;&#20197;&#36890;&#36807;&#20256;&#36882;&#19968;&#20010;&#21253;&#21547;&#21015;&#21517;&#30340;&#25968;&#32452;&#26469;&#23454;&#29616;&#12290;<code>$uniqueBy<\/code>&#21442;&#25968;&#12290;<\/p><pre><code>\/\/ Assume product_id and store_id together form a unique constraint\nStock::upsert([\n    ['product_id' =&gt; 1, 'store_id' =&gt; 100, 'quantity' =&gt; 50],\n    ['product_id' =&gt; 2, 'store_id' =&gt; 100, 'quantity' =&gt; 30]\n], ['product_id', 'store_id']);\n<\/code><\/pre><p>&#36825;&#27573;&#20195;&#30721;&#29255;&#27573;&#36890;&#36807;&#20351;&#29992;&#20135;&#21697;ID&#21644;&#21830;&#24215;ID&#20316;&#20026;&#22797;&#21512;&#38190;&#26469;&#26356;&#26032;&#24211;&#23384;&#35760;&#24405;&#12290;<\/p><h3>&#26465;&#20214;&#26356;&#26032;<\/h3><p>&#22312;&#26576;&#20123;&#24773;&#20917;&#19979;&#65292;&#24744;&#21487;&#33021;&#24076;&#26395;&#20165;&#22312;&#29305;&#23450;&#26465;&#20214;&#28385;&#36275;&#26102;&#26356;&#26032;&#26576;&#20123;&#23383;&#27573;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#26041;&#27861;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<code>$update<\/code>&#21442;&#25968;&#19982;&#25968;&#25454;&#24211;&#21407;&#22987;&#34920;&#36798;&#24335;&#32467;&#21512;&#20351;&#29992;&#12290;<\/p><pre><code>\/\/ Update the quantity only if it is less than the upserted value\nStock::upsert([\n    ['product_id' =&gt; 1, 'store_id' =&gt; 100, 'quantity' =&gt; 60]\n], ['product_id', 'store_id'],\n['quantity' =&gt; \nDB::raw('GREATEST(stocks.quantity, values(quantity))')]\n);\n<\/code><\/pre><p>&#22312;&#36825;&#19968;&#32534;&#30721;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992;&#19968;&#20010;&#21407;&#22987;&#34920;&#36798;&#24335;&#26469;&#21482;&#22686;&#21152;&#25968;&#25454;&#24211;&#20013;&#23384;&#22312;&#30340;&#25968;&#37327;&#65292;&#22914;&#26524;&#20256;&#36882;&#30340;&#37327;&#22823;&#20110;&#29616;&#26377;&#25968;&#37327;&#30340;&#35805;&#12290;<code>upsert<\/code>&#26041;&#27861;&#12290;<\/p><h2>&#31649;&#29702;&#26102;&#38388;&#25139;<\/h2><p>&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;Eloquent &#20250;&#33258;&#21160;&#35774;&#32622;&#36825;&#20123;&#20540;&#12290;<code>created_at<\/code>and<code>updated_at<\/code>&#35760;&#24405;&#25554;&#20837;&#25110;&#26356;&#26032;&#30340;&#26102;&#38388;&#25139;&#12290;&#28982;&#32780;&#65292;&#20351;&#29992;&#36825;&#20123;&#26102;&#38388;&#25139;&#26102;&#38656;&#35201;&#27880;&#24847;&#19968;&#20123;&#38382;&#39064;&#12290;<code>upsert<\/code>&#24403;&#28982;&#65292;&#20320;&#21487;&#20197;&#25163;&#21160;&#31649;&#29702;&#26102;&#38388;&#25139;&#12290;&#36825;&#37324;&#26377;&#19968;&#31181;&#26041;&#27861;&#65306;<\/p><pre><code>\/\/ Assume we want to set a custom creation and update date\n$now = now();\nUser::upsert([\n    ['name' =&gt; 'James Bond', 'email' =&gt; '[email&nbsp;protected]', 'created_at' =&gt; $now, 'updated_at' =&gt; $now]\n], 'email');\n<\/code><\/pre><p>&#35813;&#20195;&#30721;&#26126;&#30830;&#22320;&#23558; created_at &#21644; updated_at &#23383;&#27573;&#35774;&#32622;&#20026;&#24403;&#21069;&#26102;&#38388;&#65292;&#26080;&#35770;&#26159;&#25554;&#20837;&#25805;&#20316;&#36824;&#26159;&#26356;&#26032;&#25805;&#20316;&#12290;<\/p><h2>&#38169;&#35823;&#22788;&#29702;<\/h2><p>&#22312;&#20219;&#20309;&#25968;&#25454;&#24211;&#25805;&#20316;&#20013;&#65292;&#20102;&#35299;&#24182;&#22788;&#29702;&#21487;&#33021;&#20986;&#29616;&#30340;&#28508;&#22312;&#38169;&#35823;&#37117;&#26159;&#24456;&#37325;&#35201;&#30340;&#12290;&#21516;&#26679;&#30340;&#36947;&#29702;&#20063;&#36866;&#29992;&#20110;&#20854;&#20182;&#26041;&#38754;&#12290;<code>upsert<\/code>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#24744;&#30340;&#24847;&#24605;&#12290;&#24744;&#33021;&#21542;&#25552;&#20379;&#26356;&#22810;&#30340;&#19978;&#19979;&#25991;&#25110;&#28548;&#28165;&#19968;&#19979;&#65311;<code>upsert<\/code>&#23427;&#22825;&#29983;&#35774;&#35745;&#26469;&#25233;&#21046;&#37325;&#22797;&#38169;&#35823;&#65292;&#20294;&#24744;&#20173;&#28982;&#38656;&#35201;&#20174;&#25968;&#25454;&#24211;&#32423;&#21035;&#22788;&#29702;&#28508;&#22312;&#30340;&#38169;&#35823;&#65292;&#20363;&#22914;&#36830;&#25509;&#38382;&#39064;&#25110;&#20854;&#20182;&#31867;&#22411;&#30340;&#38382;&#39064;&#65306;<\/p><pre><code>try {\n    User::upsert([...], 'email');\n} catch (Exception $e) {\n    \/\/ Handle exception\n}\n<\/code><\/pre><p>&#22914;&#26524;&#27491;&#22312;&#20351;&#29992;Laravel 8&#25110;&#26356;&#39640;&#29256;&#26412;&#65292;&#24314;&#35758;&#20063;&#20351;&#29992;DB Facade&#30340;<code>transaction<\/code>&#20026;&#20102;&#30830;&#20445;&#24744;&#30340;&#25554;&#20837;&#21644;&#26356;&#26032;&#25805;&#20316;&#30340;&#21407;&#23376;&#24615;&#65292;&#29305;&#21035;&#26159;&#22312;&#25191;&#34892;&#22810;&#20010;&#24182;&#21457;&#30340;upsert&#25805;&#20316;&#26102;&#65292;&#35831;&#21442;&#38405;&#20197;&#19979;&#26041;&#27861;&#65306;<\/p><h2>&#24615;&#33021;&#32771;&#34385;&#22240;&#32032;<\/h2><p>&#27491;&#22312;&#22788;&#29702;&#65292;&#35831;&#31245;&#31561;&#8230;<code>upsert<\/code>&#19968;&#20010;&#39640;&#25928;&#30340;&#26041;&#27861;&#26469;&#30830;&#20445;&#35760;&#24405;&#27491;&#30830;&#25554;&#20837;&#25110;&#26356;&#26032;&#65292;&#30830;&#23454;&#38656;&#35201;&#32771;&#34385;&#19968;&#20123;&#22240;&#32032;&#12290;&#23601;&#20687;&#20219;&#20309;&#20248;&#21270;&#30340;&#25968;&#25454;&#24211;&#25805;&#20316;&#19968;&#26679;&#65292;&#22312;&#22788;&#29702;&#22823;&#37327;&#25968;&#25454;&#38598;&#26102;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#32771;&#34385;&#21040;&#25209;&#27425;&#22823;&#23567;&#21644;&#20107;&#21153;&#31649;&#29702;&#20197;&#20445;&#25345;&#25805;&#20316;&#39034;&#30021;&#24182;&#39640;&#25928;&#12290;<\/p><p>&#25209;&#37327;&#25191;&#34892;&#22823;&#26356;&#26032;&#25805;&#20316;&#24182;&#20351;&#29992;DB&#20107;&#21153;&#26469;&#26368;&#23567;&#21270;&#23545;&#24212;&#29992;&#31243;&#24207;&#24615;&#33021;&#30340;&#24433;&#21709;&#26159;&#19968;&#31181;&#22909;&#30340;&#23454;&#36341;&#12290;<\/p><pre><code>DB::transaction(function () {\n    User::upsert([...], 'email');\n    \/\/ ...additional logic...\n});\n<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#24744;&#30340;&#38382;&#39064;&#65292;&#35831;&#24744;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#12290;<code>upsert<\/code>Laravel&#30340;Eloquent ORM&#20013;&#30340;&#21629;&#20196;&#26159;&#19968;&#31181;&#28789;&#27963;&#19988;&#39640;&#25928;&#30340;&#25554;&#20837;&#25110;&#26356;&#26032;&#35760;&#24405;&#30340;&#26041;&#24335;&#12290;&#36825;&#31181;&#24378;&#22823;&#30340;&#21151;&#33021;&#22312;&#38656;&#35201;&#36827;&#34892;&#26465;&#20214;&#25554;&#20837;&#25110;&#26356;&#26032;&#26102;&#65292;&#21487;&#20197;&#20943;&#23569;&#20889;&#25805;&#20316;&#30340;&#22797;&#26434;&#24615;&#12290;&#36890;&#36807;&#31034;&#20363;&#23637;&#31034;&#20102;&#23427;&#30340;&#36866;&#29992;&#33539;&#22260;&#65292;&#20351;&#20854;&#25104;&#20026;&#20320;&#22312;Laravel&#24037;&#20855;&#31665;&#20013;&#19981;&#21487;&#25110;&#32570;&#30340;&#24037;&#20855;&#20043;&#19968;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;&#25968;&#25454;&#24211;&#25805;&#20316;&#20013;&#65292;&#8221;&#20248;&#38597;&#30340;Upsert&#8221;&#26159;&#19968;&#31181;&#39640;&#25928;&#19988;&#23433;&#20840;&#30340;&#26041;&#27861;&#65292;&#29992;&#20110;&#22788;&#29702;&#25968;&#25454;&#26356;&#26032;&#21644;&#28155;&#21152;&#30340;&#25805;&#20316;&#12290;&#36825;&#31181;&#27169;&#24335;&#30830;&#20445;&#20102;&#21363;&#20351;&#22312;&#22823;&#37327;&#24182;&#21457;&#35831;&#27714;&#19979;&#65292;&#20063;&#33021;&#22815;&#20445;&#25345;&#25968;&#25454;&#30340;&#19968;&#33268;&#24615;&#21644;&#23436;&#25972;&#24615;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#34920;&#65292;&#23427;&#23384;&#20648;&#30528;&#29992;&#25143;&#20449;&#24687;&#65306;<\/p>\n<pre><code class=\"language-sql\">CREATE TABLE User (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    email VARCHAR(255) UNIQUE NOT NULL\n);<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#25105;&#20204;&#24819;&#35201;&#23454;&#29616;&#19968;&#20010;&#21151;&#33021;&#65292;&#24403;&#26032;&#29992;&#25143;&#34987;&#28155;&#21152;&#26102;&#65292;&#22914;&#26524;&#35813;&#29992;&#25143;&#24050;&#23384;&#22312;&#65292;&#21017;&#26356;&#26032;&#20854;&#20449;&#24687;&#65307;&#21542;&#21017;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#35760;&#24405;&#12290;<\/p>\n<pre><code class=\"language-python\">import mysql.connector\nfrom mysql.connector import Error\n\ndef insert_user(user_info):\n    try:\n        # &#36830;&#25509;&#21040;&#25968;&#25454;&#24211;\n        connection = mysql.connector.connect(\n            host='localhost',\n            user='yourusername',\n            password='yourpassword',\n            database='yourdatabase'\n        )\n\n        if connection.is_connected():\n            cursor = connection.cursor()\n\n            query = \"\"\"\n                INSERT INTO User (name, email)\n                VALUES (%s, %s)\n                ON DUPLICATE KEY UPDATE \n                    name=%s,\n                    email=%s;\n            \"\"\"\n\n            values = (user_info['name'], user_info['email'], user_info['name'], user_info['email'])\n\n            cursor.execute(query, values)\n\n            connection.commit()\n\n            print(\"New record created successfully.\")\n\n    except Error as e:\n        print(f\"The error '{e}' occurred\")\n\n    finally:\n        if connection.is_connected():\n            cursor.close()\n            connection.close()\n            print(\"MySQL connection is closed\")<\/code><\/pre>\n<h3>&#22914;&#20309;&#20351;&#29992;&#27492;&#20989;&#25968;<\/h3>\n<ol>\n<li>\n<p><strong>&#23548;&#20837;&#24211;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-python\">import mysql.connector<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#36830;&#25509;&#21040;&#25968;&#25454;&#24211;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-python\">connection = mysql.connector.connect(\n   host='localhost',\n   user='yourusername',\n   password='yourpassword',\n   database='yourdatabase'\n)<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#25191;&#34892;&#25554;&#20837;&#26597;&#35810;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-python\">insert_user({\n   'name': 'John Doe',\n   'email': 'johndoe@example.com'\n})<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#20851;&#38381;&#25968;&#25454;&#24211;&#36830;&#25509;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-python\">if connection.is_connected():\n   cursor.close()\n   connection.close()\n   print(\"MySQL connection is closed\")<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#20102;&#22914;&#20309;&#26681;&#25454;&#29305;&#23450;&#26465;&#20214;&#65288;&#22914;&#26816;&#26597;&#29616;&#26377;&#35760;&#24405;&#26159;&#21542;&#23384;&#22312;&#65289;&#26469;&#20915;&#23450;&#26159;&#26356;&#26032;&#36824;&#26159;&#26032;&#22686;&#12290;&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#25105;&#20204;&#21487;&#20197;&#30830;&#20445;&#25968;&#25454;&#24211;&#25805;&#20316;&#30340;&#25928;&#29575;&#21644;&#23433;&#20840;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; Upsert&#65288;Update or Insert&#65289;&#25805;&#20316;&#26159;&#25968;&#25454;&#24211;&#31649;&#29702;&#31995;&#32479;&#20013;&#038;#2999..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-962","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=962"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=962"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=962"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}