راکت
حل شده

عدم درک مفهوم کد در validation

2 پاسخ

عرض ادب خدمت مهندسین عزیز🌹 بنده در درک این بخش کد برای اعتبار سنجی مشکل دارم و مفهومش را متوجه نمی شم.(بیشتر مفهوم attach متوجه نمی شم)

  public function store(Request $request)
    {
        $validated = $request->validate([
            'users' => 'nullable|array|exists:users,id',
        ]);
        $discount = Discount::create($validated);
        $discount->users()->attach($validated['users']);

و در اینجا هم ادامه همان کد در بخش update ولی اینبار مشکل در درک sync و detach دارم

   public function update(Request $request,Discount $discount)
    {
        $validated = $request->validate([
            'users' => 'nullable|array|exists:users,id',
        ]);
        $discount->update($validated);
        isset($validated['users'])
            ? $discount->users()->sync($validated['users'])
            : $discount->users()->detach();
ثبت پرسش جدید

پاسخ‌ها

2
مهدی شاه عباسیان
مهدی شاه عباسیان
@shahabbasian

تخصص: برنامه نویس

بهترین پاسخ

سلام

دوست من attach و sync و detach ربطی به validation کردن اطلاعات نداره
این موارد برای اضافه کردن اطلاعات به جداول دارای روابط هست.

در کد اول

$discount = Discount::create($validated);

اینجا discount جدید ساخته میشه
و با attach

$discount->users()->attach($validated['users']);

در اینجا همینطور که میبینید discount که ساخته شد با discount->user() داره به رابطه مدل discount با مدل user اشاره میکنه که با attach و دادن user بهش خودکار جدول رابط رو برای این discount و user پر میکنه

در آخر sync کارش اینه که همه رابطه های موجود discount رو حذف میکنه و این جدید هارو توش میریزه
و detach رابطه که بهش اشاره شده رو حذف میکنه

مهران مرندی
مهران مرندی
@mehranmarandi

تخصص: برنامه نویس

این دو بخشی که فرمودید ارتباطی با خود validate ندارن
متدهایی برای اتصال چند به چند هست. در elequent وقتی میخوایید دوتا جدول رو از طریق یه جدول واسطه به هم متصل کنید، بعد از این که در مدل های دو جدول اصلی تعریف کردید که ارتباطشون با هم از طریق کدوم جدول واسطه هست، برای اتصال رکورد های این دو جدول به هم دیگه از متد های زیر استفاده میشه

برای متصل کردن یه رکورد از جدول categories به products

$products->categories()->attach($category_id );

برای قطع اتصال یه رکورد از جدول categories به products

$products->categories()->detach($category_id );

و اگر بخواییم دسته ای چند تا رکورد با آید های 1 و 2 و 3 از جدول categories رو با یه رکورد از جدول products متصل کنیم با sync اینکار انجام میشه

$products->categories()->sync([1, 2, 3]);

و همچنین اگر میخوایید id های ۱ ۲ ۳ اضافه بشن و اگر id دیگه ای هم از قبل بود حذف نشه اینجوری

$products->categories()->syncWithoutDetaching([1, 2, 3]);

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

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

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