1masoud
6 سال پیش توسط 1masoud مطرح شد
10 پاسخ

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

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


ثبت پرسش جدید
مهدی
@code2code 6 سال پیش مطرح شد
0

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

روش ۱:

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 6 سال پیش مطرح شد
0

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

  • محدود کردن فیلد جدول از سمت 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 6 سال پیش مطرح شد
1

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

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

    ]);

1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش مطرح شد
0

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


مهدی
@code2code 6 سال پیش آپدیت شد
0

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

if($exists){

}else{
    //code
}

//code

1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش آپدیت شد
0

@code2code
@ali.bayat

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

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


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش آپدیت شد
0

@code2code
@ali.bayat

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


مهدی
@code2code 6 سال پیش مطرح شد
0

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

روش ۱:

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


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش مطرح شد
0

@code2code
ممنون مهدی


1masoud
تخصص : php,laravel
@masoudproton 6 سال پیش آپدیت شد
0

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

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


مصطفی
تخصص : لاراول و جنگو
@701mostafa 5 سال پیش مطرح شد
0

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


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

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