🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ میثم کیانی
حل تمرین متد replace
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۰۵ تیر ۱۴۰۲

سلام وقت بخیر؛

این متد تقریبا مثل Update عمل میکنه اما با یه تفاوت خاص، اونم اینکه اگه اطلاعات از قبل موجود باشه که میره اون اطلاعات رو ویرایش میکنه ولی اگه اطلاعات نباشه، عملیات Insert رو انجام میده.

حالا بیشتر کجا به کار میاد؟! فکرکنم بهترین جایی که میتونیم ازش استفاده کنیم برای زمانی هست که ما یک سری مقالات داخل سایت داریم، حالا میخواییم چندتا مقاله دیگه هم اضافه کنیم. تعداد مقالات سایتم خیلی زیاده و نمیتونیم بریم دونه دونه چک کنیم که آیا این مقالات داخل سایت هستند یا نه! پس میتونیم از این متد استفاده کنیم، اگه مقاله باشه که دیگه نمیره از اول یه مقاله تکراری داخل سایت منتشر کنه ولی اگه وجود نداشته باشه پس میره از اول اون رو میسازه.

من متد رو تست کردم ولی متاسفانه مثل توضیحات خود وردپرس نبود و هربار اطلاعات رو از اول اضافه میکرد شاید جایی رو اشتباه رفتم این کدهای منه

$name   = 'meysam';
$family = 'kiani';
$tell   = 3500;
$date = [
    'name'   => $name,
    'family' => $family,
    'tell'   => $tell
];
$data_format = [
    '%s',
    '%s',
    '%d'
];
$stmt = $wpdb->replace( $table_custom_users, $date, $data_format);
echo $wpdb->insert_id;

سلام

به خاطر اینه که آی دی رو مشخص نکردین.

از روی primary key تشخیص میده که رکورد وجود داره یا نه. اگه آی دی رو مشخص نکنین با یه آی دی جدید یه رکورد جدید ایجاد می‌کنه.

ولی اگه آی دی رو مشخص کنین همون سطری که مربوط به اون آی دی هست آپدیت میشه.

آزاده نوری ۲۹ تیر ۱۴۰۲، ۰۸:۲۹

سلام ممنون از توضیحاتتون، میتونید یک نمونه کد مثال بزنید؟ چون توی داکیومنت وردپرس ننوشته بود باید ID مشخص کنم

ممنونم

میثم کیانی ۲۹ تیر ۱۴۰۲، ۱۵:۱۳

سلام

خانم نوری درست میگن. شما باید آی‌دی رو توی آرایه دیتا مشخص کنید که اگر اون آی‌دی توی رکوردها بود بره اصلاحش کنه و اگر نبود ایجاد کنه. مثل کد زیر:

$id = 25;
$name   = 'meysam';
$family = 'kiani';
$tell   = 3500;
$date = [
    'id' => $id,
    'name'   => $name,
    'family' => $family,
    'tell'   => $tell
];
$data_format = [
    '%d',
    '%s',
    '%s',
    '%d'
];
$stmt = $wpdb->replace( $table_custom_users, $date, $data_format);


توی مثال داکیومنت هم بهش اشاره شده:


6da5-wpdb-repalce.png

اسماعیل آبابائی ۱۰ شهریور ۱۴۰۲، ۱۲:۵۸