Laravel 11 / Builder::addUniqueIdsToUpsertValues()

laravel 11 builder add unique ids to upsert values
22 اردیبهشت 1404

تعریف تابع Builder::addUniqueIdsToUpsertValues()


تابع addUniqueIdsToUpsertValues در فریم‌ورک لاراول ۱۱ به شما کمک می‌کند تا به‌راحتی شناسه‌های یکتا به مقادیر آپدیت‌ پذیر در عملیات upsert اضافه کنید. یکی از مشکلاتی که ممکن است هنگام وارد کردن داده‌ها به پایگاه داده با آن مواجه شوید، این است که مقادیر تکراری وجود دارند و بدین ترتیب باید طوری عمل کنید که فقط داده‌های یکتا وارد شوند.


در لاراول، عملیات upsert به شما اجازه می‌دهد تا داده‌ها را به‌صورت همزمان آپدیت و وارد کنید. برای مثال، شما می‌توانید یک رکورد را اگر وجود داشته باشد آپدیت کنید و اگر وجود نداشت، آن را وارد کنید. به این ترتیب، برنامه‌تان بهینه‌تر و سریع‌تر عمل می‌کند.


از آنجا که اضافه کردن شناسه‌های یکتا به رکوردها می‌تواند در بهینه‌سازی عملکرد کلی برنامه مؤثر باشد، تابع addUniqueIdsToUpsertValues به‌طور خاص برای این هدف طراحی شده است. این تابع به شما این امکان را می‌دهد که تضمین کنید شناسه‌ها در هنگام آپدیت یا وارد کردن جدید، تکراری نخواهند شد.


با استفاده از این تابع، شما می‌توانید به سادگی و بدون هیچ‌گونه پیچیدگی اضافی، اطمینان حاصل کنید که داده‌های شما همیشه یکتا می‌مانند. این کار می‌تواند از بروز خطاها و عدم سازگاری داده‌ها جلوگیری کند و به عملکرد بهتر پایگاه داده کمک کند.



$values = [
[ 'name' => 'example', 'email' => '[email protected]' ],
[ 'name' => 'test', 'email' => '[email protected]' ]
];

DB::table('users')->upsert(
$values,
['email'], // Unique by email
['name'] // Update name if exists
);

توضیح کد


$values: این متغیر شامل آرایه‌ای از داده‌ها است که می‌خواهیم به جدول users اضافه کنیم. هر رکورد شامل نام و ایمیل کاربر است.




DB::table('users')->upsert: این خط فراخوانی تابع upsert برای جدول users را نشان می‌دهد که در آن داده‌ها به‌صورت همزمان وارد و آپدیت می‌شوند.




['email']: این بخش مشخص می‌کند که فیلد ایمیل باید به‌عنوان شناسه یکتای رکوردها در نظر گرفته شود. یعنی اگر ایمیلی مشابه وجود داشته باشد، رکورد مورد نظر آپدیت خواهد شد.




['name']: در این قسمت مشخص شده که اگر رکوردی با همان ایمیل پیدا شد، باید فقط فیلد نام آن رکورد آپدیت شود.

سوالات متداول

؟

تابع addUniqueIdsToUpsertValues دقیقا چه کاری انجام می‌دهد؟

؟

چرا باید از upsert استفاده کنیم؟

؟

آیا می‌توانم چندین فیلد را به‌عنوان یکتا تعریف کنم؟