<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Mehrshad Safavi</title><link>https://virgool.ir/feed/@safavi.mehrshad</link><description>یه developer جونیور خسته :)</description><language>fa</language><pubDate>2026-11-11 15:11:57</pubDate><image><url>https://files.virgool.ir/upload/users/1484263/avatar/MB8H9o.jpeg</url><title>Mehrshad Safavi</title><link>https://virgool.ir/@safavi.mehrshad</link></image><item><title>چرا متد upsert در لاراول درست کار نکرد؟</title><link>https://virgool.ir/@safavi.mehrshad/چرا-متد-upsert-در-لاراول-درست-کار-نکرد-yhifjprvvyyu</link><description>سلاماین اولین مقاله من توی ویرگوله :)اگر از طریق سرچ به این مطلب رسیدی، احتمالا توی استفاده از متد upsert که توی لاراول 8 معرفی شده، به مشکل خوردی.من به طور مشخص میخواستم چند هزار رکورد رو در دیتابیس وارد و در صورتی که همین الانش اونجا حضور داشت، آپدیت کنم.شاید راه حل ساده لوحانه برای انجامش این باشه:اما مشکلش اینه که به ازای هر ردیف از دیتابیس، دو تا کانکشن به دیتابیس میزنه که خب در تعداد رکوردهای بالا، اصلا منطقی نیست.در اینجا ناجی ما یعنی upsert وارد میشه که با گرفتن آرایه ای از کل ردیف ها درصورت وجود داشتن فیلداهایی رو آپدیت و در صورت جدید بودن، کل فیلدها رو insert میکنه.مانند مثال زیر:اما اینجا، متد من طوری که انتظار داشتم کار نکرد!به طوری که با هر بار اجرا، تمام ردیف‌ها رو insert میکرد، پس چه بلایی سر update اومد؟این جوابی بود که پیدا کردم:متد upsert در ورودی دوم، از ما نام ستون هایی رو می‌گیره که اون ردیف رو در جدولمون unique می‌کنه.اما نکته اینجاست که، این ستون ها باید واقعا در جدول بصورت unique ایندکس باشند، به این معنی که هنگام ثبت رکورد مشابه، خطا دریافت کنید.این دقیقا کاریه که upsert انجام میده، اون شروع به insert ردیف ها می‌کنه؛ تا زمانی که ارور duplicate entry برخورد کنه، اونجاست که متد میاد و ائن ردیف رو آپدیت می‌کنه.پس اگر می‌خوایم عملکرد درستی از متد ببینیم یا باید ایندکس یگانه ای مثل id در ورودی ها استفاده کنیم(که خیلی اوغات منطقی نیست.) یا باید سایر ستون ها رو یگانه ایندکس کنیم.این درصورتیه که ما این مشکل رو در updateOrCreate نداشتیم.در اونجا حتی نیازی به یگانه بودن اون ردیف وجود نداشت و درصورت وجود چندتا از اون، اولی(first) انتخاب می‌شد و تغییر می‌کرد.مرسی که مطالعه کردید، امیدوارم کمکی کرده باشم. من دانش خیلی اندکی دارم، اگر جایی اشتباه کردم خوشحال می‌شم بهم اطلاع بدید.</description><category>Mehrshad Safavi</category><author>Mehrshad Safavi</author><pubDate>Sun, 30 Jan 2022 23:50:03 +0330</pubDate></item></channel></rss>