راکت
حل شده

حذف موارد تکراری

10 پاسخ

چطوری میشه بگیم که اگه این مورد تکراری شد در دیتابیس ‌ذخیره نکن و به ادامه کار رو انجام بده ارور نده
مثلا ما فیلد title در دیتابیس داریم به صورت دستی اولین بار aliرو میگیره دومین بار هم ali رو میگیره اما دخیره نمیکنه چون وجود داره و کار رو ناتمام نمیگذاره و سومین بار reza رو میگیره
چطوری این موارد تکراری رو حذف کنم لطفا با مثال

ثبت پرسش جدید

پاسخ‌ها

10
مهدی
مهدی
@code2code
بهترین پاسخ

نگاه کن توی لاراول دوتا راه واسه این مشکل گذاشن
یکی اینکه چک میکنه اگه رکورد از قبل بودش آپدیتش میکنه
روش دوم میگه اگه بود بیخیال شو ولش کن

روش ۱:

InfoModel::updateOrCreate(['title'=>trim($e2)],[
'bazdid'=>$eeee,
'date'=>$rrr,
//'link_id'=>$op
]);

روش ۲:

InfoModel::firstOrCreate(['title'=>trim($e2)],[
'bazdid'=>$eeee,
'date'=>$rrr,
//'link_id'=>$op
]);

دقیقا اینجا همه چی هست https://laravel.com/docs/5.7/eloquent

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

سه تا گزینه دارید:

  • محدود کردن فیلد جدول از سمت SQL
  • بررسی با PHP قبل از اضافه کردن
  • و هر دو گزینه بالا با هم

از سمت SQL میتونی فیلد هارو داخل Migration از نوع unique تعریف کنی

برای PHP هم چیزی شبیه زیر:

Class PostController extends Controller
{

    public function store(Post $post)
    {
        if (Post::where('title', $post->title)->exists())
        {
            abort(404,'title exists in database');
        }
        if ($validationPasses) 
        {
            // create a new post

        }

    }

}
مهدی
مهدی
@code2code

خوب از این متد برای اینجا استفاده کن

Model::updateOrCreate(['title' => $request->title], [
        'title' =>  $request->title,
        'text' =>  $request->text,
        'description' =>  $request->description,

    ]);

شاید پاسخ شما همین‌جا باشد

1masoud
1masoud
@masoudproton

تخصص: php,laravel

@ali.bayat
@code2code
درسته.
من میخواهم زمانی که تکراری بود ذیگه ارور نده بره و کار بعدیشو انجام بده ولی زمانی که از این ها استفاده میکنم ارور میده و به مرحله بعدی نمیره

مهدی
مهدی
@code2code

چیزی که من نوشتم ارور نمیده اگه فیلد تکراری باشه ردیف با همون عنوان رو آپدیتش میکنه
ضمنا اگه میخوای ادامه مبده میتونی داخل if هیچی نذاری خوب...

if($exists){

}else{
    //code
}

//code
1masoud
1masoud
@masoudproton

تخصص: php,laravel

@code2code
@ali.bayat

اقا مهدی ببخشید هر کاری کردم نشد
این کد من هست کجا باید این کارو بکنم
$u=InfoModel::create([
'title'=>trim($e۲),
'bazdid'=>$eeee,
'date'=>$rrr,
//'link_id'=>$op
]);

این کد من است این شرط رو کجا ی این دستور قرار بدم

1masoud
1masoud
@masoudproton

تخصص: php,laravel

@code2code
@ali.bayat

آقا مهدی میشه راهنمایی کنی ممنون

1masoud
1masoud
@masoudproton

تخصص: php,laravel

@code2code
ممنون مهدی

1masoud
1masoud
@masoudproton

تخصص: php,laravel

@ali.bayat
@RaymondDragon
@mohsenbostan
@Alimotreb
@hesammousavi
@code2code
@gharibe.ashna2012
@masoudproton
@Arshavir

این کارو کردم نشد باز id تغییر میکند
منظورم اینکه هر دفعه رکوردها آپدیت میشه idرکورد ها رو از عدد یک شماره گزاری کنه نه مثلا ۱۰۰ یا ۲۵و...

مصطفی
مصطفی
@701mostafa

تخصص: لاراول و جنگو

دیوونه شدم تا یه تابع درب و داغون واسشون نوشتم.......
دو روز دیر دیدم این تاپیکو....
آقا مهدی و بقیه بنازم..... ای ول....... خدا خیرتون بده.....
@code2code

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام